From 32072654b9a13f7d37174067628da326a809790f Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Wed, 22 Dec 2021 16:35:56 +0100
Subject: [PATCH 001/229] Intermediate backup of Compute:

- Implement WIM REST API for OSM
- Implement IETFL2VPN REST API
- Implement unitary tests for OSM-Compute-Service workflow
---
 run_tests_locally.sh                          |  72 +--
 src/compute/Config.py                         |   2 +-
 src/compute/service/rest_server/Server.py     |  11 +-
 src/compute/tests/MockServiceService.py       |  45 ++
 .../tests/MockServiceServiceServicerImpl.py   |  28 +
 src/compute/tests/mock_osm/MockOSM.py         |  47 ++
 .../tests/mock_osm/WimconnectorIETFL2VPN.py   | 499 ++++++++++++++++++
 src/compute/tests/mock_osm/__init__.py        |   0
 .../tests/mock_osm/acknowledgements.txt       |   3 +
 src/compute/tests/mock_osm/sdnconn.py         | 242 +++++++++
 src/compute/tests/test_unitary.py             |  63 +--
 11 files changed, 930 insertions(+), 82 deletions(-)
 create mode 100644 src/compute/tests/MockServiceService.py
 create mode 100644 src/compute/tests/MockServiceServiceServicerImpl.py
 create mode 100644 src/compute/tests/mock_osm/MockOSM.py
 create mode 100644 src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py
 create mode 100644 src/compute/tests/mock_osm/__init__.py
 create mode 100644 src/compute/tests/mock_osm/acknowledgements.txt
 create mode 100644 src/compute/tests/mock_osm/sdnconn.py

diff --git a/run_tests_locally.sh b/run_tests_locally.sh
index b483de806..271e06851 100755
--- a/run_tests_locally.sh
+++ b/run_tests_locally.sh
@@ -19,46 +19,46 @@ cat $PROJECTDIR/coverage/.coveragerc.template | sed s+~/teraflow/controller+$PRO
 #kubectl --namespace tf-dev expose deployment contextservice --port=6379 --type=NodePort --name=redis-tests
 #echo "Waiting 10 seconds for Redis to start..."
 #sleep 10
-export REDIS_SERVICE_HOST=$(kubectl get node kubernetes-master -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-export REDIS_SERVICE_PORT=$(kubectl get service redis-tests --namespace tf-dev -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}')
+#export REDIS_SERVICE_HOST=$(kubectl get node kubernetes-master -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
+#export REDIS_SERVICE_PORT=$(kubectl get service redis-tests --namespace tf-dev -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}')
 
 # First destroy old coverage file
 rm -f $COVERAGEFILE
 
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    common/orm/tests/test_unitary.py \
-    common/message_broker/tests/test_unitary.py \
-    common/rpc_method_wrapper/tests/test_unitary.py
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    centralizedattackdetector/tests/test_unitary.py
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    context/tests/test_unitary.py
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    device/tests/test_unitary.py
-
-coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
-    l3_centralizedattackdetector/tests/test_unitary.py
-
-coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
-    l3_distributedattackdetector/tests/test_unitary.py
-
-coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
-    l3_attackmitigator/tests/test_unitary.py
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    opticalcentralizedattackdetector/tests/test_unitary.py
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    dbscanserving/tests/test_unitary.py
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    opticalattackmitigator/tests/test_unitary.py
-
-coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-    service/tests/test_unitary.py
+#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+#    common/orm/tests/test_unitary.py \
+#    common/message_broker/tests/test_unitary.py \
+#    common/rpc_method_wrapper/tests/test_unitary.py
+#
+#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+#    centralizedattackdetector/tests/test_unitary.py
+#
+#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+#    context/tests/test_unitary.py
+#
+#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+#    device/tests/test_unitary.py
+#
+#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
+#    l3_centralizedattackdetector/tests/test_unitary.py
+#
+#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
+#    l3_distributedattackdetector/tests/test_unitary.py
+#
+#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
+#    l3_attackmitigator/tests/test_unitary.py
+#
+#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+#    opticalcentralizedattackdetector/tests/test_unitary.py
+#
+#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+#    dbscanserving/tests/test_unitary.py
+#
+#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+#    opticalattackmitigator/tests/test_unitary.py
+#
+#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+#    service/tests/test_unitary.py
 
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     compute/tests/test_unitary.py
diff --git a/src/compute/Config.py b/src/compute/Config.py
index e95740493..761ed10cb 100644
--- a/src/compute/Config.py
+++ b/src/compute/Config.py
@@ -10,7 +10,7 @@ GRPC_GRACE_PERIOD = 60
 
 # REST-API settings
 RESTAPI_SERVICE_PORT = 8080
-RESTAPI_BASE_URL = '/api'
+RESTAPI_BASE_URL = '/restconf/data/ietf-l2vpn-svc:l2vpn-svc'
 
 # Prometheus settings
 METRICS_PORT = 9192
diff --git a/src/compute/service/rest_server/Server.py b/src/compute/service/rest_server/Server.py
index c68515e91..03212d4aa 100644
--- a/src/compute/service/rest_server/Server.py
+++ b/src/compute/service/rest_server/Server.py
@@ -1,14 +1,20 @@
-import logging, threading
-from flask import Flask
+import logging, threading, time
+from flask import Flask, request
 from flask_restful import Api
 from werkzeug.serving import make_server
 from compute.Config import RESTAPI_BASE_URL, RESTAPI_SERVICE_PORT
 
+
 logging.getLogger('werkzeug').setLevel(logging.WARNING)
 
 BIND_ADDRESS = '0.0.0.0'
 LOGGER = logging.getLogger(__name__)
 
+def log_request(response):
+    timestamp = time.strftime('[%Y-%b-%d %H:%M]')
+    LOGGER.info('%s %s %s %s %s', timestamp, request.remote_addr, request.method, request.full_path, response.status)
+    return response
+
 class Server(threading.Thread):
     def __init__(self, host=BIND_ADDRESS, port=RESTAPI_SERVICE_PORT, base_url=RESTAPI_BASE_URL):
         threading.Thread.__init__(self, daemon=True)
@@ -16,6 +22,7 @@ class Server(threading.Thread):
         self.port = port
         self.base_url = base_url
         self.app = Flask(__name__)
+        self.app.after_request(log_request)
         self.api = Api(self.app, prefix=self.base_url)
 
     def add_resource(self, resource, *urls, **kwargs):
diff --git a/src/compute/tests/MockServiceService.py b/src/compute/tests/MockServiceService.py
new file mode 100644
index 000000000..fe90aa4d8
--- /dev/null
+++ b/src/compute/tests/MockServiceService.py
@@ -0,0 +1,45 @@
+import grpc, logging
+from concurrent import futures
+from service.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD
+from service.proto.service_pb2_grpc import  add_ServiceServiceServicer_to_server
+from .MockServiceServiceServicerImpl import MockServiceServiceServicerImpl
+
+BIND_ADDRESS = '0.0.0.0'
+LOGGER = logging.getLogger(__name__)
+
+class MockServiceService:
+    def __init__(
+        self, address=BIND_ADDRESS, port=GRPC_SERVICE_PORT, max_workers=GRPC_MAX_WORKERS,
+        grace_period=GRPC_GRACE_PERIOD):
+
+        self.address = address
+        self.port = port
+        self.endpoint = None
+        self.max_workers = max_workers
+        self.grace_period = grace_period
+        self.service_servicer = None
+        self.pool = None
+        self.server = None
+
+    def start(self):
+        self.endpoint = '{:s}:{:s}'.format(str(self.address), str(self.port))
+        LOGGER.info('Starting Service (tentative endpoint: {:s}, max_workers: {:s})...'.format(
+            str(self.endpoint), str(self.max_workers)))
+
+        self.pool = futures.ThreadPoolExecutor(max_workers=self.max_workers)
+        self.server = grpc.server(self.pool) # , interceptors=(tracer_interceptor,))
+
+        self.service_servicer = MockServiceServiceServicerImpl()
+        add_ServiceServiceServicer_to_server(self.service_servicer, self.server)
+
+        port = self.server.add_insecure_port(self.endpoint)
+        self.endpoint = '{:s}:{:s}'.format(str(self.address), str(port))
+        LOGGER.info('Listening on {:s}...'.format(str(self.endpoint)))
+        self.server.start()
+
+        LOGGER.debug('Service started')
+
+    def stop(self):
+        LOGGER.debug('Stopping service (grace period {:s} seconds)...'.format(str(self.grace_period)))
+        self.server.stop(self.grace_period)
+        LOGGER.debug('Service stopped')
diff --git a/src/compute/tests/MockServiceServiceServicerImpl.py b/src/compute/tests/MockServiceServiceServicerImpl.py
new file mode 100644
index 000000000..35da85407
--- /dev/null
+++ b/src/compute/tests/MockServiceServiceServicerImpl.py
@@ -0,0 +1,28 @@
+import grpc, json, logging
+from google.protobuf.json_format import MessageToDict
+from service.proto.context_pb2 import ConnectionList, Empty, Service, ServiceId
+from service.proto.service_pb2_grpc import ServiceServiceServicer
+
+LOGGER = logging.getLogger(__name__)
+
+def grpc_message_to_json_string(message):
+    return json.dumps(MessageToDict(
+        message, including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False),
+        sort_keys=True)
+
+class MockServiceServiceServicerImpl(ServiceServiceServicer):
+    def CreateService(self, request : Service, context : grpc.ServicerContext) -> ServiceId:
+        LOGGER.info('[CreateService] request={:s}'.format(grpc_message_to_json_string(request)))
+        return request.service_id
+
+    def UpdateService(self, request : Service, context : grpc.ServicerContext) -> ServiceId:
+        LOGGER.info('[UpdateService] request={:s}'.format(grpc_message_to_json_string(request)))
+        return request.service_id
+
+    def DeleteService(self, request : ServiceId, context : grpc.ServicerContext) -> Empty:
+        LOGGER.info('[DeleteService] request={:s}'.format(grpc_message_to_json_string(request)))
+        return Empty()
+
+    def GetConnectionList(self, request : ServiceId, context : grpc.ServicerContext) -> ConnectionList:
+        LOGGER.info('[GetConnectionList] request={:s}'.format(grpc_message_to_json_string(request)))
+        return ConnectionList()
diff --git a/src/compute/tests/mock_osm/MockOSM.py b/src/compute/tests/mock_osm/MockOSM.py
new file mode 100644
index 000000000..f98cfed7a
--- /dev/null
+++ b/src/compute/tests/mock_osm/MockOSM.py
@@ -0,0 +1,47 @@
+import logging
+from .WimconnectorIETFL2VPN import WimconnectorIETFL2VPN
+
+LOGGER = logging.getLogger(__name__)
+
+WIM_USERNAME = 'admin'
+WIM_PASSWORD = 'admin'
+WIM_MAPPING  = []
+
+SERVICE_TYPE = 'ELAN'
+
+class MockOSM:
+    def __init__(self, wim_url):
+        wim = {'wim_url': wim_url}
+        wim_account = {'user': WIM_USERNAME, 'password': WIM_PASSWORD}
+        config = {'service_endpoint_mapping': WIM_MAPPING}
+        self.wim = WimconnectorIETFL2VPN(wim, wim_account, config=config)
+        self.service_uuid = None
+
+    def create_connectivity_service(self):
+        connection_points = []
+        self.wim.check_credentials()
+        LOGGER.info('[create_connectivity_service] connection_points={:s}'.format(str(connection_points)))
+        result = self.wim.create_connectivity_service(SERVICE_TYPE, connection_points)
+        LOGGER.info('[create_connectivity_service] result={:s}'.format(str(result)))
+        self.service_uuid = None
+
+    def get_connectivity_service_status(self):
+        connection_points = []
+        self.wim.check_credentials()
+        LOGGER.info('[get_connectivity_service] connection_points={:s}'.format(str(connection_points)))
+        result = self.wim.get_connectivity_service_status(self.service_uuid, conn_info=conn_info)
+        LOGGER.info('[get_connectivity_service] result={:s}'.format(str(result)))
+
+    def edit_connectivity_service(self):
+        connection_points = []
+        self.wim.check_credentials()
+        LOGGER.info('[edit_connectivity_service] connection_points={:s}'.format(str(connection_points)))
+        result = self.wim.edit_connectivity_service(self.service_uuid, conn_info=conn_info, connection_points=connection_points)
+        LOGGER.info('[edit_connectivity_service] result={:s}'.format(str(result)))
+
+    def delete_connectivity_service(self):
+        connection_points = []
+        self.wim.check_credentials()
+        LOGGER.info('[delete_connectivity_service] connection_points={:s}'.format(str(connection_points)))
+        result = self.wim.delete_connectivity_service(self.service_uuid, conn_info=conn_info)
+        LOGGER.info('[delete_connectivity_service] result={:s}'.format(str(result)))
diff --git a/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py b/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py
new file mode 100644
index 000000000..f47c56dc8
--- /dev/null
+++ b/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py
@@ -0,0 +1,499 @@
+# -*- coding: utf-8 -*-
+##
+# Copyright 2018 Telefonica
+# All Rights Reserved.
+#
+# Contributors: Oscar Gonzalez de Dios, Manuel Lopez Bravo, Guillermo Pajares Martin
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This work has been performed in the context of the Metro-Haul project -
+# funded by the European Commission under Grant number 761727 through the
+# Horizon 2020 program.
+##
+"""The SDN/WIM connector is responsible for establishing wide area network
+connectivity.
+
+This SDN/WIM connector implements the standard IETF RFC 8466 "A YANG Data
+ Model for Layer 2 Virtual Private Network (L2VPN) Service Delivery"
+
+It receives the endpoints and the necessary details to request
+the Layer 2 service.
+"""
+import requests
+import uuid
+import logging
+#from osm_ro_plugin.sdnconn import SdnConnectorBase, SdnConnectorError
+from .sdnconn import SdnConnectorBase, SdnConnectorError
+
+"""Check layer where we move it"""
+
+
+class WimconnectorIETFL2VPN(SdnConnectorBase):
+    def __init__(self, wim, wim_account, config=None, logger=None):
+        """IETF L2VPN WIM connector
+
+        Arguments: (To be completed)
+            wim (dict): WIM record, as stored in the database
+            wim_account (dict): WIM account record, as stored in the database
+        """
+        self.logger = logging.getLogger("ro.sdn.ietfl2vpn")
+        super().__init__(wim, wim_account, config, logger)
+        self.headers = {"Content-Type": "application/json"}
+        self.mappings = {
+            m["service_endpoint_id"]: m for m in self.service_endpoint_mapping
+        }
+        self.user = wim_account.get("user")
+        self.passwd = wim_account.get("passwordd")
+
+        if self.user and self.passwd is not None:
+            self.auth = (self.user, self.passwd)
+        else:
+            self.auth = None
+
+        self.logger.info("IETFL2VPN Connector Initialized.")
+
+    def check_credentials(self):
+        endpoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format(
+            self.wim["wim_url"]
+        )
+
+        try:
+            response = requests.get(endpoint, auth=self.auth)
+            http_code = response.status_code
+        except requests.exceptions.RequestException as e:
+            raise SdnConnectorError(e.message, http_code=503)
+
+        if http_code != 200:
+            raise SdnConnectorError("Failed while authenticating", http_code=http_code)
+
+        self.logger.info("Credentials checked")
+
+    def get_connectivity_service_status(self, service_uuid, conn_info=None):
+        """Monitor the status of the connectivity service stablished
+
+        Arguments:
+            service_uuid: Connectivity service unique identifier
+
+        Returns:
+            Examples::
+                {'sdn_status': 'ACTIVE'}
+                {'sdn_status': 'INACTIVE'}
+                {'sdn_status': 'DOWN'}
+                {'sdn_status': 'ERROR'}
+        """
+        try:
+            self.logger.info("Sending get connectivity service stuatus")
+            servicepoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services/vpn-service={}/".format(
+                self.wim["wim_url"], service_uuid
+            )
+            response = requests.get(servicepoint, auth=self.auth)
+
+            if response.status_code != requests.codes.ok:
+                raise SdnConnectorError(
+                    "Unable to obtain connectivity servcice status",
+                    http_code=response.status_code,
+                )
+
+            service_status = {"sdn_status": "ACTIVE"}
+
+            return service_status
+        except requests.exceptions.ConnectionError:
+            raise SdnConnectorError("Request Timeout", http_code=408)
+
+    def search_mapp(self, connection_point):
+        id = connection_point["service_endpoint_id"]
+        if id not in self.mappings:
+            raise SdnConnectorError("Endpoint {} not located".format(str(id)))
+        else:
+            return self.mappings[id]
+
+    def create_connectivity_service(self, service_type, connection_points, **kwargs):
+        """Stablish WAN connectivity between the endpoints
+
+        Arguments:
+            service_type (str): ``ELINE`` (L2), ``ELAN`` (L2), ``ETREE`` (L2),
+                ``L3``.
+            connection_points (list): each point corresponds to
+                an entry point from the DC to the transport network. One
+                connection point serves to identify the specific access and
+                some other service parameters, such as encapsulation type.
+                Represented by a dict as follows::
+
+                    {
+                      "service_endpoint_id": ..., (str[uuid])
+                      "service_endpoint_encapsulation_type": ...,
+                           (enum: none, dot1q, ...)
+                      "service_endpoint_encapsulation_info": {
+                        ... (dict)
+                        "vlan": ..., (int, present if encapsulation is dot1q)
+                        "vni": ... (int, present if encapsulation is vxlan),
+                        "peers": [(ipv4_1), (ipv4_2)]
+                            (present if encapsulation is vxlan)
+                      }
+                    }
+
+              The service endpoint ID should be previously informed to the WIM
+              engine in the RO when the WIM port mapping is registered.
+
+        Keyword Arguments:
+            bandwidth (int): value in kilobytes
+            latency (int): value in milliseconds
+
+        Other QoS might be passed as keyword arguments.
+
+        Returns:
+            tuple: ``(service_id, conn_info)`` containing:
+               - *service_uuid* (str): UUID of the established connectivity
+                  service
+               - *conn_info* (dict or None): Information to be stored at the
+                 database (or ``None``). This information will be provided to
+                 the :meth:`~.edit_connectivity_service` and :obj:`~.delete`.
+                 **MUST** be JSON/YAML-serializable (plain data structures).
+
+        Raises:
+            SdnConnectorException: In case of error.
+        """
+        if service_type == "ELINE":
+            if len(connection_points) > 2:
+                raise SdnConnectorError(
+                    "Connections between more than 2 endpoints are not supported"
+                )
+
+            if len(connection_points) < 2:
+                raise SdnConnectorError("Connections must be of at least 2 endpoints")
+
+            """First step, create the vpn service"""
+            uuid_l2vpn = str(uuid.uuid4())
+            vpn_service = {}
+            vpn_service["vpn-id"] = uuid_l2vpn
+            vpn_service["vpn-scv-type"] = "vpws"
+            vpn_service["svc-topo"] = "any-to-any"
+            vpn_service["customer-name"] = "osm"
+            vpn_service_list = []
+            vpn_service_list.append(vpn_service)
+            vpn_service_l = {"ietf-l2vpn-svc:vpn-service": vpn_service_list}
+            response_service_creation = None
+            conn_info = []
+            self.logger.info("Sending vpn-service :{}".format(vpn_service_l))
+
+            try:
+                endpoint_service_creation = (
+                    "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format(
+                        self.wim["wim_url"]
+                    )
+                )
+                response_service_creation = requests.post(
+                    endpoint_service_creation,
+                    headers=self.headers,
+                    json=vpn_service_l,
+                    auth=self.auth,
+                )
+            except requests.exceptions.ConnectionError:
+                raise SdnConnectorError(
+                    "Request to create service Timeout", http_code=408
+                )
+
+            if response_service_creation.status_code == 409:
+                raise SdnConnectorError(
+                    "Service already exists",
+                    http_code=response_service_creation.status_code,
+                )
+            elif response_service_creation.status_code != requests.codes.created:
+                raise SdnConnectorError(
+                    "Request to create service not accepted",
+                    http_code=response_service_creation.status_code,
+                )
+
+            """Second step, create the connections and vpn attachments"""
+            for connection_point in connection_points:
+                connection_point_wan_info = self.search_mapp(connection_point)
+                site_network_access = {}
+                connection = {}
+
+                if connection_point["service_endpoint_encapsulation_type"] != "none":
+                    if (
+                        connection_point["service_endpoint_encapsulation_type"]
+                        == "dot1q"
+                    ):
+                        """The connection is a VLAN"""
+                        connection["encapsulation-type"] = "dot1q-vlan-tagged"
+                        tagged = {}
+                        tagged_interf = {}
+                        service_endpoint_encapsulation_info = connection_point[
+                            "service_endpoint_encapsulation_info"
+                        ]
+
+                        if service_endpoint_encapsulation_info["vlan"] is None:
+                            raise SdnConnectorError("VLAN must be provided")
+
+                        tagged_interf["cvlan-id"] = service_endpoint_encapsulation_info[
+                            "vlan"
+                        ]
+                        tagged["dot1q-vlan-tagged"] = tagged_interf
+                        connection["tagged-interface"] = tagged
+                    else:
+                        raise NotImplementedError("Encapsulation type not implemented")
+
+                site_network_access["connection"] = connection
+                self.logger.info("Sending connection:{}".format(connection))
+                vpn_attach = {}
+                vpn_attach["vpn-id"] = uuid_l2vpn
+                vpn_attach["site-role"] = vpn_service["svc-topo"] + "-role"
+                site_network_access["vpn-attachment"] = vpn_attach
+                self.logger.info("Sending vpn-attachement :{}".format(vpn_attach))
+                uuid_sna = str(uuid.uuid4())
+                site_network_access["network-access-id"] = uuid_sna
+                site_network_access["bearer"] = connection_point_wan_info[
+                    "service_mapping_info"
+                ]["bearer"]
+                site_network_accesses = {}
+                site_network_access_list = []
+                site_network_access_list.append(site_network_access)
+                site_network_accesses[
+                    "ietf-l2vpn-svc:site-network-access"
+                ] = site_network_access_list
+                conn_info_d = {}
+                conn_info_d["site"] = connection_point_wan_info["service_mapping_info"][
+                    "site-id"
+                ]
+                conn_info_d["site-network-access-id"] = site_network_access[
+                    "network-access-id"
+                ]
+                conn_info_d["mapping"] = None
+                conn_info.append(conn_info_d)
+
+                try:
+                    endpoint_site_network_access_creation = (
+                        "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/"
+                        "sites/site={}/site-network-accesses/".format(
+                            self.wim["wim_url"],
+                            connection_point_wan_info["service_mapping_info"][
+                                "site-id"
+                            ],
+                        )
+                    )
+                    response_endpoint_site_network_access_creation = requests.post(
+                        endpoint_site_network_access_creation,
+                        headers=self.headers,
+                        json=site_network_accesses,
+                        auth=self.auth,
+                    )
+
+                    if (
+                        response_endpoint_site_network_access_creation.status_code
+                        == 409
+                    ):
+                        self.delete_connectivity_service(vpn_service["vpn-id"])
+
+                        raise SdnConnectorError(
+                            "Site_Network_Access with ID '{}' already exists".format(
+                                site_network_access["network-access-id"]
+                            ),
+                            http_code=response_endpoint_site_network_access_creation.status_code,
+                        )
+                    elif (
+                        response_endpoint_site_network_access_creation.status_code
+                        == 400
+                    ):
+                        self.delete_connectivity_service(vpn_service["vpn-id"])
+
+                        raise SdnConnectorError(
+                            "Site {} does not exist".format(
+                                connection_point_wan_info["service_mapping_info"][
+                                    "site-id"
+                                ]
+                            ),
+                            http_code=response_endpoint_site_network_access_creation.status_code,
+                        )
+                    elif (
+                        response_endpoint_site_network_access_creation.status_code
+                        != requests.codes.created
+                        and response_endpoint_site_network_access_creation.status_code
+                        != requests.codes.no_content
+                    ):
+                        self.delete_connectivity_service(vpn_service["vpn-id"])
+
+                        raise SdnConnectorError(
+                            "Request no accepted",
+                            http_code=response_endpoint_site_network_access_creation.status_code,
+                        )
+                except requests.exceptions.ConnectionError:
+                    self.delete_connectivity_service(vpn_service["vpn-id"])
+
+                    raise SdnConnectorError("Request Timeout", http_code=408)
+
+            return uuid_l2vpn, conn_info
+        else:
+            raise NotImplementedError
+
+    def delete_connectivity_service(self, service_uuid, conn_info=None):
+        """Disconnect multi-site endpoints previously connected
+
+        This method should receive as the first argument the UUID generated by
+        the ``create_connectivity_service``
+        """
+        try:
+            self.logger.info("Sending delete")
+            servicepoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services/vpn-service={}/".format(
+                self.wim["wim_url"], service_uuid
+            )
+            response = requests.delete(servicepoint, auth=self.auth)
+
+            if response.status_code != requests.codes.no_content:
+                raise SdnConnectorError(
+                    "Error in the request", http_code=response.status_code
+                )
+        except requests.exceptions.ConnectionError:
+            raise SdnConnectorError("Request Timeout", http_code=408)
+
+    def edit_connectivity_service(
+        self, service_uuid, conn_info=None, connection_points=None, **kwargs
+    ):
+        """Change an existing connectivity service, see
+        ``create_connectivity_service``"""
+        # sites = {"sites": {}}
+        # site_list = []
+        vpn_service = {}
+        vpn_service["svc-topo"] = "any-to-any"
+        counter = 0
+
+        for connection_point in connection_points:
+            site_network_access = {}
+            connection_point_wan_info = self.search_mapp(connection_point)
+            params_site = {}
+            params_site["site-id"] = connection_point_wan_info["service_mapping_info"][
+                "site-id"
+            ]
+            params_site["site-vpn-flavor"] = "site-vpn-flavor-single"
+            device_site = {}
+            device_site["device-id"] = connection_point_wan_info["device-id"]
+            params_site["devices"] = device_site
+            # network_access = {}
+            connection = {}
+
+            if connection_point["service_endpoint_encapsulation_type"] != "none":
+                if connection_point["service_endpoint_encapsulation_type"] == "dot1q":
+                    """The connection is a VLAN"""
+                    connection["encapsulation-type"] = "dot1q-vlan-tagged"
+                    tagged = {}
+                    tagged_interf = {}
+                    service_endpoint_encapsulation_info = connection_point[
+                        "service_endpoint_encapsulation_info"
+                    ]
+
+                    if service_endpoint_encapsulation_info["vlan"] is None:
+                        raise SdnConnectorError("VLAN must be provided")
+
+                    tagged_interf["cvlan-id"] = service_endpoint_encapsulation_info[
+                        "vlan"
+                    ]
+                    tagged["dot1q-vlan-tagged"] = tagged_interf
+                    connection["tagged-interface"] = tagged
+                else:
+                    raise NotImplementedError("Encapsulation type not implemented")
+
+            site_network_access["connection"] = connection
+            vpn_attach = {}
+            vpn_attach["vpn-id"] = service_uuid
+            vpn_attach["site-role"] = vpn_service["svc-topo"] + "-role"
+            site_network_access["vpn-attachment"] = vpn_attach
+            uuid_sna = conn_info[counter]["site-network-access-id"]
+            site_network_access["network-access-id"] = uuid_sna
+            site_network_access["bearer"] = connection_point_wan_info[
+                "service_mapping_info"
+            ]["bearer"]
+            site_network_accesses = {}
+            site_network_access_list = []
+            site_network_access_list.append(site_network_access)
+            site_network_accesses[
+                "ietf-l2vpn-svc:site-network-access"
+            ] = site_network_access_list
+
+            try:
+                endpoint_site_network_access_edit = (
+                    "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/"
+                    "sites/site={}/site-network-accesses/".format(
+                        self.wim["wim_url"],
+                        connection_point_wan_info["service_mapping_info"]["site-id"],
+                    )
+                )
+                response_endpoint_site_network_access_creation = requests.put(
+                    endpoint_site_network_access_edit,
+                    headers=self.headers,
+                    json=site_network_accesses,
+                    auth=self.auth,
+                )
+
+                if response_endpoint_site_network_access_creation.status_code == 400:
+                    raise SdnConnectorError(
+                        "Service does not exist",
+                        http_code=response_endpoint_site_network_access_creation.status_code,
+                    )
+                elif (
+                    response_endpoint_site_network_access_creation.status_code != 201
+                    and response_endpoint_site_network_access_creation.status_code
+                    != 204
+                ):
+                    raise SdnConnectorError(
+                        "Request no accepted",
+                        http_code=response_endpoint_site_network_access_creation.status_code,
+                    )
+            except requests.exceptions.ConnectionError:
+                raise SdnConnectorError("Request Timeout", http_code=408)
+
+            counter += 1
+
+        return None
+
+    def clear_all_connectivity_services(self):
+        """Delete all WAN Links corresponding to a WIM"""
+        try:
+            self.logger.info("Sending clear all connectivity services")
+            servicepoint = (
+                "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format(
+                    self.wim["wim_url"]
+                )
+            )
+            response = requests.delete(servicepoint, auth=self.auth)
+
+            if response.status_code != requests.codes.no_content:
+                raise SdnConnectorError(
+                    "Unable to clear all connectivity services",
+                    http_code=response.status_code,
+                )
+        except requests.exceptions.ConnectionError:
+            raise SdnConnectorError("Request Timeout", http_code=408)
+
+    def get_all_active_connectivity_services(self):
+        """Provide information about all active connections provisioned by a
+        WIM
+        """
+        try:
+            self.logger.info("Sending get all connectivity services")
+            servicepoint = (
+                "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format(
+                    self.wim["wim_url"]
+                )
+            )
+            response = requests.get(servicepoint, auth=self.auth)
+
+            if response.status_code != requests.codes.ok:
+                raise SdnConnectorError(
+                    "Unable to get all connectivity services",
+                    http_code=response.status_code,
+                )
+
+            return response
+        except requests.exceptions.ConnectionError:
+            raise SdnConnectorError("Request Timeout", http_code=408)
diff --git a/src/compute/tests/mock_osm/__init__.py b/src/compute/tests/mock_osm/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/compute/tests/mock_osm/acknowledgements.txt b/src/compute/tests/mock_osm/acknowledgements.txt
new file mode 100644
index 000000000..b7ce926dd
--- /dev/null
+++ b/src/compute/tests/mock_osm/acknowledgements.txt
@@ -0,0 +1,3 @@
+MockOSM is based on source code taken from:
+https://osm.etsi.org/gitlab/osm/ro/-/blob/master/RO-plugin/osm_ro_plugin/sdnconn.py
+https://osm.etsi.org/gitlab/osm/ro/-/blob/master/RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn/wimconn_ietfl2vpn.py
diff --git a/src/compute/tests/mock_osm/sdnconn.py b/src/compute/tests/mock_osm/sdnconn.py
new file mode 100644
index 000000000..a1849c9ef
--- /dev/null
+++ b/src/compute/tests/mock_osm/sdnconn.py
@@ -0,0 +1,242 @@
+# -*- coding: utf-8 -*-
+##
+# Copyright 2018 University of Bristol - High Performance Networks Research
+# Group
+# All Rights Reserved.
+#
+# Contributors: Anderson Bravalheri, Dimitrios Gkounis, Abubakar Siddique
+# Muqaddas, Navdeep Uniyal, Reza Nejabati and Dimitra Simeonidou
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact with: <highperformance-networks@bristol.ac.uk>
+#
+# Neither the name of the University of Bristol nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# This work has been performed in the context of DCMS UK 5G Testbeds
+# & Trials Programme and in the framework of the Metro-Haul project -
+# funded by the European Commission under Grant number 761727 through the
+# Horizon 2020 and 5G-PPP programmes.
+##
+"""The SDN connector is responsible for establishing both wide area network connectivity (WIM)
+and intranet SDN connectivity.
+
+It receives information from ports to be connected .
+"""
+
+import logging
+from http import HTTPStatus
+
+
+class SdnConnectorError(Exception):
+    """Base Exception for all connector related errors
+    provide the parameter 'http_code' (int) with the error code:
+        Bad_Request = 400
+        Unauthorized = 401  (e.g. credentials are not valid)
+        Not_Found = 404    (e.g. try to edit or delete a non existing connectivity service)
+        Forbidden = 403
+        Method_Not_Allowed = 405
+        Not_Acceptable = 406
+        Request_Timeout = 408  (e.g timeout reaching server, or cannot reach the server)
+        Conflict = 409
+        Service_Unavailable = 503
+        Internal_Server_Error = 500
+    """
+
+    def __init__(self, message, http_code=HTTPStatus.INTERNAL_SERVER_ERROR.value):
+        Exception.__init__(self, message)
+        self.http_code = http_code
+
+
+class SdnConnectorBase(object):
+    """Abstract base class for all the SDN connectors
+
+    Arguments:
+        wim (dict): WIM record, as stored in the database
+        wim_account (dict): WIM account record, as stored in the database
+        config
+    The arguments of the constructor are converted to object attributes.
+    An extra property, ``service_endpoint_mapping`` is created from ``config``.
+    """
+
+    def __init__(self, wim, wim_account, config=None, logger=None):
+        """
+        :param wim: (dict). Contains among others 'wim_url'
+        :param wim_account: (dict). Contains among others 'uuid' (internal id), 'name',
+            'sdn' (True if is intended for SDN-assist or False if intended for WIM), 'user', 'password'.
+        :param config: (dict or None): Particular information of plugin. These keys if present have a common meaning:
+            'mapping_not_needed': (bool) False by default or if missing, indicates that mapping is not needed.
+            'service_endpoint_mapping': (list) provides the internal endpoint mapping. The meaning is:
+                KEY                     meaning for WIM             meaning for SDN assist
+                --------                --------                    --------
+                device_id               pop_switch_dpid             compute_id
+                device_interface_id     pop_switch_port             compute_pci_address
+                service_endpoint_id     wan_service_endpoint_id     SDN_service_endpoint_id
+                service_mapping_info    wan_service_mapping_info    SDN_service_mapping_info
+                    contains extra information if needed. Text in Yaml format
+                switch_dpid             wan_switch_dpid             SDN_switch_dpid
+                switch_port             wan_switch_port             SDN_switch_port
+                datacenter_id           vim_account                 vim_account
+            id: (internal, do not use)
+            wim_id: (internal, do not use)
+        :param logger (logging.Logger): optional logger object. If none is passed 'openmano.sdn.sdnconn' is used.
+        """
+        self.logger = logger or logging.getLogger("ro.sdn")
+        self.wim = wim
+        self.wim_account = wim_account
+        self.config = config or {}
+        self.service_endpoint_mapping = self.config.get("service_endpoint_mapping", [])
+
+    def check_credentials(self):
+        """Check if the connector itself can access the SDN/WIM with the provided url (wim.wim_url),
+            user (wim_account.user), and password (wim_account.password)
+
+        Raises:
+            SdnConnectorError: Issues regarding authorization, access to
+                external URLs, etc are detected.
+        """
+        raise NotImplementedError
+
+    def get_connectivity_service_status(self, service_uuid, conn_info=None):
+        """Monitor the status of the connectivity service established
+
+        Arguments:
+            service_uuid (str): UUID of the connectivity service
+            conn_info (dict or None): Information returned by the connector
+                during the service creation/edition and subsequently stored in
+                the database.
+
+        Returns:
+            dict: JSON/YAML-serializable dict that contains a mandatory key
+                ``sdn_status`` associated with one of the following values::
+
+                    {'sdn_status': 'ACTIVE'}
+                        # The service is up and running.
+
+                    {'sdn_status': 'INACTIVE'}
+                        # The service was created, but the connector
+                        # cannot determine yet if connectivity exists
+                        # (ideally, the caller needs to wait and check again).
+
+                    {'sdn_status': 'DOWN'}
+                        # Connection was previously established,
+                        # but an error/failure was detected.
+
+                    {'sdn_status': 'ERROR'}
+                        # An error occurred when trying to create the service/
+                        # establish the connectivity.
+
+                    {'sdn_status': 'BUILD'}
+                        # Still trying to create the service, the caller
+                        # needs to wait and check again.
+
+                Additionally ``error_msg``(**str**) and ``sdn_info``(**dict**)
+                keys can be used to provide additional status explanation or
+                new information available for the connectivity service.
+        """
+        raise NotImplementedError
+
+    def create_connectivity_service(self, service_type, connection_points, **kwargs):
+        """
+        Establish SDN/WAN connectivity between the endpoints
+        :param service_type: (str): ``ELINE`` (L2), ``ELAN`` (L2), ``ETREE`` (L2), ``L3``.
+        :param connection_points:  (list): each point corresponds to
+            an entry point to be connected. For WIM: from the DC to the transport network.
+            For SDN: Compute/PCI to the transport network. One
+            connection point serves to identify the specific access and
+            some other service parameters, such as encapsulation type.
+            Each item of the list is a dict with:
+                "service_endpoint_id": (str)(uuid)  Same meaning that for 'service_endpoint_mapping' (see __init__)
+                    In case the config attribute mapping_not_needed is True, this value is not relevant. In this case
+                    it will contain the string "device_id:device_interface_id"
+                "service_endpoint_encapsulation_type": None, "dot1q", ...
+                "service_endpoint_encapsulation_info": (dict) with:
+                    "vlan": ..., (int, present if encapsulation is dot1q)
+                    "vni": ... (int, present if encapsulation is vxlan),
+                    "peers": [(ipv4_1), (ipv4_2)] (present if encapsulation is vxlan)
+                    "mac": ...
+                    "device_id": ..., same meaning that for 'service_endpoint_mapping' (see __init__)
+                    "device_interface_id": same meaning that for 'service_endpoint_mapping' (see __init__)
+                    "switch_dpid": ..., present if mapping has been found for this device_id,device_interface_id
+                    "swith_port": ... present if mapping has been found for this device_id,device_interface_id
+                    "service_mapping_info": present if mapping has been found for this device_id,device_interface_id
+        :param kwargs: For future versions:
+            bandwidth (int): value in kilobytes
+            latency (int): value in milliseconds
+            Other QoS might be passed as keyword arguments.
+        :return: tuple: ``(service_id, conn_info)`` containing:
+            - *service_uuid* (str): UUID of the established connectivity service
+            - *conn_info* (dict or None): Information to be stored at the database (or ``None``).
+                This information will be provided to the :meth:`~.edit_connectivity_service` and :obj:`~.delete`.
+                **MUST** be JSON/YAML-serializable (plain data structures).
+        :raises: SdnConnectorException: In case of error. Nothing should be created in this case.
+            Provide the parameter http_code
+        """
+        raise NotImplementedError
+
+    def delete_connectivity_service(self, service_uuid, conn_info=None):
+        """
+        Disconnect multi-site endpoints previously connected
+
+        :param service_uuid: The one returned by create_connectivity_service
+        :param conn_info: The one returned by last call to 'create_connectivity_service' or 'edit_connectivity_service'
+            if they do not return None
+        :return: None
+        :raises: SdnConnectorException: In case of error. The parameter http_code must be filled
+        """
+        raise NotImplementedError
+
+    def edit_connectivity_service(
+        self, service_uuid, conn_info=None, connection_points=None, **kwargs
+    ):
+        """Change an existing connectivity service.
+
+        This method's arguments and return value follow the same convention as
+        :meth:`~.create_connectivity_service`.
+
+        :param service_uuid: UUID of the connectivity service.
+        :param conn_info: (dict or None): Information previously returned by last call to create_connectivity_service
+            or edit_connectivity_service
+        :param connection_points: (list): If provided, the old list of connection points will be replaced.
+        :param kwargs: Same meaning that create_connectivity_service
+        :return: dict or None: Information to be updated and stored at the database.
+                When ``None`` is returned, no information should be changed.
+                When an empty dict is returned, the database record will be deleted.
+                **MUST** be JSON/YAML-serializable (plain data structures).
+        Raises:
+            SdnConnectorException: In case of error.
+        """
+
+    def clear_all_connectivity_services(self):
+        """Delete all WAN Links in a WIM.
+
+        This method is intended for debugging only, and should delete all the
+        connections controlled by the WIM/SDN, not only the  connections that
+        a specific RO is aware of.
+
+        Raises:
+            SdnConnectorException: In case of error.
+        """
+        raise NotImplementedError
+
+    def get_all_active_connectivity_services(self):
+        """Provide information about all active connections provisioned by a
+        WIM.
+
+        Raises:
+            SdnConnectorException: In case of error.
+        """
+        raise NotImplementedError
diff --git a/src/compute/tests/test_unitary.py b/src/compute/tests/test_unitary.py
index 689e60382..6935ac2a8 100644
--- a/src/compute/tests/test_unitary.py
+++ b/src/compute/tests/test_unitary.py
@@ -1,19 +1,13 @@
-import logging, os, pytest, requests, time
-from google.protobuf.json_format import MessageToDict
-from common.type_checkers.Assertions import validate_service_id
-from compute.client.ComputeClient import ComputeClient
-from compute.proto.context_pb2 import Service
-from compute.service.ComputeService import ComputeService
-from compute.Config import (
-    GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD, RESTAPI_SERVICE_PORT, RESTAPI_BASE_URL)
+import logging, os, pytest, time
+from compute.Config import RESTAPI_SERVICE_PORT, RESTAPI_BASE_URL
 from compute.service.rest_server.Server import Server
 from compute.service.rest_server.resources.Compute import Compute
-from service.service.ServiceService import ServiceService
 from service.Config import (
     GRPC_SERVICE_PORT as SERVICE_GRPC_SERVICE_PORT, GRPC_MAX_WORKERS as SERVICE_GRPC_MAX_WORKERS,
     GRPC_GRACE_PERIOD as SERVICE_GRPC_GRACE_PERIOD)
+from .mock_osm.MockOSM import MockOSM
+from .MockServiceService import MockServiceService
 
-compute_grpc_port = 10000 + GRPC_SERVICE_PORT # avoid privileged ports
 compute_restapi_port = 10000 + RESTAPI_SERVICE_PORT # avoid privileged ports
 service_grpc_port = 10000 + SERVICE_GRPC_SERVICE_PORT # avoid privileged ports
 
@@ -25,24 +19,16 @@ LOGGER.setLevel(logging.DEBUG)
 
 @pytest.fixture(scope='session')
 def service_service():
-    _service = ServiceService(
+    _service = MockServiceService(
         port=service_grpc_port, max_workers=SERVICE_GRPC_MAX_WORKERS, grace_period=SERVICE_GRPC_GRACE_PERIOD)
     _service.start()
     yield _service
     _service.stop()
 
 @pytest.fixture(scope='session')
-def compute_service(service_service : ServiceService):
-    _service = ComputeService(port=compute_grpc_port, max_workers=GRPC_MAX_WORKERS, grace_period=GRPC_GRACE_PERIOD)
-    _service.start()
-    yield _service
-    _service.stop()
-
-@pytest.fixture(scope='session')
-def compute_service_rest():
+def compute_service_rest(service_service):
     _rest_server = Server(port=compute_restapi_port, base_url=RESTAPI_BASE_URL)
-    _rest_server.add_resource(
-        Compute, '/restconf/config/compute', endpoint='api.compute')
+    _rest_server.add_resource(Compute, '/vpn-services', endpoint='l2vpn.vpn-services')
     _rest_server.start()
     time.sleep(1) # bring time for the server to start
     yield _rest_server
@@ -50,27 +36,18 @@ def compute_service_rest():
     _rest_server.join()
 
 @pytest.fixture(scope='session')
-def compute_client(compute_service):
-    _client = ComputeClient(address='127.0.0.1', port=compute_grpc_port)
-    yield _client
-    _client.close()
+def osm_wim(service_service, compute_service_rest): # pylint: disable=redefined-outer-name
+    wim_url = 'http://127.0.0.1:{:d}'.format(compute_restapi_port)
+    return MockOSM(wim_url)
+
+def test_compute_create_connectivity_service_rest_api(osm_wim : MockOSM): # pylint: disable=redefined-outer-name
+    osm_wim.create_connectivity_service()
+
+def test_compute_get_connectivity_service_status_rest_api(osm_wim : MockOSM): # pylint: disable=redefined-outer-name
+    osm_wim.get_connectivity_service_status()
 
-def test_dummy_create_connectivity_service(compute_client : ComputeClient):
-    # dummy test: should fail with assertion error
-    with pytest.raises(AssertionError):
-        validate_service_id(MessageToDict(
-            compute_client.CreateConnectivityService(Service()),
-            including_default_value_fields=True, preserving_proto_field_name=True,
-            use_integers_for_enums=False))
+def test_compute_edit_connectivity_service_rest_api(osm_wim : MockOSM): # pylint: disable=redefined-outer-name
+    osm_wim.edit_connectivity_service()
 
-def test_dummy_create_connectivity_service_rest_api(compute_service_rest : Server):
-    # should work
-    request_url = 'http://127.0.0.1:{:s}{:s}/restconf/config/compute'
-    request_url = request_url.format(str(compute_restapi_port), RESTAPI_BASE_URL)
-    reply = requests.post(request_url, json={
-        # here add context of POST request body as JSON
-    })
-    json_reply = reply.json()
-    LOGGER.info('json_reply = {:s}'.format(str(json_reply)))
-    assert 'succeeded' in json_reply
-    assert json_reply['succeeded']
+def test_compute_delete_connectivity_service_rest_api(osm_wim : MockOSM): # pylint: disable=redefined-outer-name
+    osm_wim.delete_connectivity_service()
-- 
GitLab


From e6dfa488ecbe2ef952b71f2651040578111aab29 Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Wed, 5 Jan 2022 21:23:24 +0100
Subject: [PATCH 002/229] First functional version of Compute component with
 IETF L2VPN REST-API endpoint for OSM.

Common:
- added chk_attribute to type_checkers module.
- recovered run_tests_locally.sh

Compute:
- updated requirements.in
- updated Config.py
- updated RestServer
- implemented IETF-L2VPN NBI plugin
- implemented unitary tests for IETF-L2VPN NBI plugin including a Mock OSM client, and Mock Context and Service components
---
 run_tests_locally.sh                          |  72 +++----
 src/common/type_checkers/Checkers.py          |   7 +-
 src/compute/Config.py                         |   6 +-
 src/compute/requirements.in                   |   4 +
 src/compute/service/__main__.py               |  11 +-
 .../rest_server/{Server.py => RestServer.py}  |   9 +-
 .../{resources => nbi_plugins}/__init__.py    |   0
 .../nbi_plugins/ietf_l2vpn/Constants.py       |   3 +
 .../nbi_plugins/ietf_l2vpn/L2VPN_Service.py   |  69 +++++++
 .../nbi_plugins/ietf_l2vpn/L2VPN_Services.py  |  55 +++++
 .../ietf_l2vpn/L2VPN_SiteNetworkAccesses.py   | 161 +++++++++++++++
 .../nbi_plugins/ietf_l2vpn/__init__.py        |  22 ++
 .../nbi_plugins/ietf_l2vpn/schemas/Common.py  |   2 +
 .../ietf_l2vpn/schemas/__init__.py            |   0
 .../ietf_l2vpn/schemas/site_network_access.py |  66 ++++++
 .../ietf_l2vpn/schemas/vpn_service.py         |  32 +++
 .../ietf_l2vpn/tools/Authentication.py        |  11 +
 .../ietf_l2vpn/tools/HttpStatusCodes.py       |   6 +
 .../nbi_plugins/ietf_l2vpn/tools/Validator.py |  21 ++
 .../nbi_plugins/ietf_l2vpn/tools/__init__.py  |   0
 .../service/rest_server/resources/Compute.py  |  52 -----
 src/compute/tests/MockService.py              |  41 ++++
 src/compute/tests/MockServiceService.py       |  45 -----
 src/compute/tests/MockServicerImpl_Context.py | 188 ++++++++++++++++++
 ...cerImpl.py => MockServicerImpl_Service.py} |  24 ++-
 src/compute/tests/Tools.py                    |   7 +
 src/compute/tests/mock_osm/MockOSM.py         |  83 ++++++--
 .../tests/mock_osm/WimconnectorIETFL2VPN.py   |   4 +-
 src/compute/tests/test_unitary.py             |  60 ++++--
 29 files changed, 866 insertions(+), 195 deletions(-)
 rename src/compute/service/rest_server/{Server.py => RestServer.py} (87%)
 rename src/compute/service/rest_server/{resources => nbi_plugins}/__init__.py (100%)
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/Common.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/site_network_access.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/vpn_service.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/__init__.py
 delete mode 100644 src/compute/service/rest_server/resources/Compute.py
 create mode 100644 src/compute/tests/MockService.py
 delete mode 100644 src/compute/tests/MockServiceService.py
 create mode 100644 src/compute/tests/MockServicerImpl_Context.py
 rename src/compute/tests/{MockServiceServiceServicerImpl.py => MockServicerImpl_Service.py} (59%)
 create mode 100644 src/compute/tests/Tools.py

diff --git a/run_tests_locally.sh b/run_tests_locally.sh
index 271e06851..b483de806 100755
--- a/run_tests_locally.sh
+++ b/run_tests_locally.sh
@@ -19,46 +19,46 @@ cat $PROJECTDIR/coverage/.coveragerc.template | sed s+~/teraflow/controller+$PRO
 #kubectl --namespace tf-dev expose deployment contextservice --port=6379 --type=NodePort --name=redis-tests
 #echo "Waiting 10 seconds for Redis to start..."
 #sleep 10
-#export REDIS_SERVICE_HOST=$(kubectl get node kubernetes-master -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
-#export REDIS_SERVICE_PORT=$(kubectl get service redis-tests --namespace tf-dev -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}')
+export REDIS_SERVICE_HOST=$(kubectl get node kubernetes-master -o 'jsonpath={.status.addresses[?(@.type=="InternalIP")].address}')
+export REDIS_SERVICE_PORT=$(kubectl get service redis-tests --namespace tf-dev -o 'jsonpath={.spec.ports[?(@.port==6379)].nodePort}')
 
 # First destroy old coverage file
 rm -f $COVERAGEFILE
 
-#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-#    common/orm/tests/test_unitary.py \
-#    common/message_broker/tests/test_unitary.py \
-#    common/rpc_method_wrapper/tests/test_unitary.py
-#
-#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-#    centralizedattackdetector/tests/test_unitary.py
-#
-#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-#    context/tests/test_unitary.py
-#
-#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-#    device/tests/test_unitary.py
-#
-#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
-#    l3_centralizedattackdetector/tests/test_unitary.py
-#
-#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
-#    l3_distributedattackdetector/tests/test_unitary.py
-#
-#coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
-#    l3_attackmitigator/tests/test_unitary.py
-#
-#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-#    opticalcentralizedattackdetector/tests/test_unitary.py
-#
-#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-#    dbscanserving/tests/test_unitary.py
-#
-#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-#    opticalattackmitigator/tests/test_unitary.py
-#
-#coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-#    service/tests/test_unitary.py
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    common/orm/tests/test_unitary.py \
+    common/message_broker/tests/test_unitary.py \
+    common/rpc_method_wrapper/tests/test_unitary.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    centralizedattackdetector/tests/test_unitary.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    context/tests/test_unitary.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    device/tests/test_unitary.py
+
+coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
+    l3_centralizedattackdetector/tests/test_unitary.py
+
+coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
+    l3_distributedattackdetector/tests/test_unitary.py
+
+coverage run --rcfile=$RCFILE --append -m pytest -s --log-level=INFO --verbose \
+    l3_attackmitigator/tests/test_unitary.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    opticalcentralizedattackdetector/tests/test_unitary.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    dbscanserving/tests/test_unitary.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    opticalattackmitigator/tests/test_unitary.py
+
+coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
+    service/tests/test_unitary.py
 
 coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
     compute/tests/test_unitary.py
diff --git a/src/common/type_checkers/Checkers.py b/src/common/type_checkers/Checkers.py
index d0eddcf21..f78395c9c 100644
--- a/src/common/type_checkers/Checkers.py
+++ b/src/common/type_checkers/Checkers.py
@@ -1,5 +1,5 @@
 import re
-from typing import Any, Container, List, Optional, Pattern, Set, Sized, Tuple, Union
+from typing import Any, Container, Dict, List, Optional, Pattern, Set, Sized, Tuple, Union
 
 def chk_none(name : str, value : Any, reason=None) -> Any:
     if value is None: return value
@@ -11,6 +11,11 @@ def chk_not_none(name : str, value : Any, reason=None) -> Any:
     if reason is None: reason = 'must not be None.'
     raise ValueError('{}({}) {}'.format(str(name), str(value), str(reason)))
 
+def chk_attribute(name : str, container : Dict, container_name : str, **kwargs):
+    if name in container: return container[name]
+    if 'default' in kwargs: return kwargs['default']
+    raise AttributeError('Missing object({:s}) in container({:s})'.format(str(name), str(container_name)))
+
 def chk_type(name : str, value : Any, type_or_types : Union[type, Set[type]] = set()) -> Any:
     if isinstance(value, type_or_types): return value
     msg = '{}({}) is of a wrong type({}). Accepted type_or_types({}).'
diff --git a/src/compute/Config.py b/src/compute/Config.py
index 761ed10cb..b2d3179fa 100644
--- a/src/compute/Config.py
+++ b/src/compute/Config.py
@@ -1,4 +1,5 @@
 import logging
+from werkzeug.security import generate_password_hash
 
 # General settings
 LOG_LEVEL = logging.WARNING
@@ -10,7 +11,10 @@ GRPC_GRACE_PERIOD = 60
 
 # REST-API settings
 RESTAPI_SERVICE_PORT = 8080
-RESTAPI_BASE_URL = '/restconf/data/ietf-l2vpn-svc:l2vpn-svc'
+RESTAPI_BASE_URL = '/restconf/data'
+RESTAPI_USERS = {   # TODO: implement a database of credentials and permissions
+    'admin': generate_password_hash('admin'),
+}
 
 # Prometheus settings
 METRICS_PORT = 9192
diff --git a/src/compute/requirements.in b/src/compute/requirements.in
index 1da334a54..a8029e523 100644
--- a/src/compute/requirements.in
+++ b/src/compute/requirements.in
@@ -1,5 +1,9 @@
+Flask
+Flask-HTTPAuth
+Flask-RESTful
 grpcio-health-checking
 grpcio
+jsonschema
 prometheus-client
 pytest
 pytest-benchmark
diff --git a/src/compute/service/__main__.py b/src/compute/service/__main__.py
index f45af374c..eacc1f6c4 100644
--- a/src/compute/service/__main__.py
+++ b/src/compute/service/__main__.py
@@ -4,9 +4,9 @@ from common.Settings import get_setting
 from compute.Config import (
     GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD, LOG_LEVEL, RESTAPI_SERVICE_PORT, RESTAPI_BASE_URL,
     METRICS_PORT)
-from compute.service.ComputeService import ComputeService
-from compute.service.rest_server.Server import Server
-from compute.service.rest_server.resources.Compute import Compute
+from .ComputeService import ComputeService
+from .rest_server.RestServer import RestServer
+from .rest_server.nbi_plugins.ietf_l2vpn import register_ietf_l2vpn
 
 terminate = threading.Event()
 LOGGER = None
@@ -41,9 +41,8 @@ def main():
     grpc_service = ComputeService(port=grpc_service_port, max_workers=max_workers, grace_period=grace_period)
     grpc_service.start()
 
-    rest_server = Server(port=restapi_service_port, base_url=restapi_base_url)
-    rest_server.add_resource(
-        Compute, '/restconf/config/compute', endpoint='api.compute')
+    rest_server = RestServer(port=restapi_service_port, base_url=restapi_base_url)
+    register_ietf_l2vpn(rest_server)
     rest_server.start()
 
     # Wait for Ctrl+C or termination signal
diff --git a/src/compute/service/rest_server/Server.py b/src/compute/service/rest_server/RestServer.py
similarity index 87%
rename from src/compute/service/rest_server/Server.py
rename to src/compute/service/rest_server/RestServer.py
index 03212d4aa..8ed8dbbbf 100644
--- a/src/compute/service/rest_server/Server.py
+++ b/src/compute/service/rest_server/RestServer.py
@@ -1,10 +1,9 @@
 import logging, threading, time
 from flask import Flask, request
-from flask_restful import Api
+from flask_restful import Api, Resource
 from werkzeug.serving import make_server
 from compute.Config import RESTAPI_BASE_URL, RESTAPI_SERVICE_PORT
 
-
 logging.getLogger('werkzeug').setLevel(logging.WARNING)
 
 BIND_ADDRESS = '0.0.0.0'
@@ -15,17 +14,19 @@ def log_request(response):
     LOGGER.info('%s %s %s %s %s', timestamp, request.remote_addr, request.method, request.full_path, response.status)
     return response
 
-class Server(threading.Thread):
+class RestServer(threading.Thread):
     def __init__(self, host=BIND_ADDRESS, port=RESTAPI_SERVICE_PORT, base_url=RESTAPI_BASE_URL):
         threading.Thread.__init__(self, daemon=True)
         self.host = host
         self.port = port
         self.base_url = base_url
+        self.srv = None
+        self.ctx = None
         self.app = Flask(__name__)
         self.app.after_request(log_request)
         self.api = Api(self.app, prefix=self.base_url)
 
-    def add_resource(self, resource, *urls, **kwargs):
+    def add_resource(self, resource : Resource, *urls, **kwargs):
         self.api.add_resource(resource, *urls, **kwargs)
 
     def run(self):
diff --git a/src/compute/service/rest_server/resources/__init__.py b/src/compute/service/rest_server/nbi_plugins/__init__.py
similarity index 100%
rename from src/compute/service/rest_server/resources/__init__.py
rename to src/compute/service/rest_server/nbi_plugins/__init__.py
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
new file mode 100644
index 000000000..87c32c444
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
@@ -0,0 +1,3 @@
+DEFAULT_MTU = 1512
+DEFAULT_ADDRESS_FAMILIES = ['IPV4']
+DEFAULT_SUB_INTERFACE_INDEX = 0
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py
new file mode 100644
index 000000000..752a027ad
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py
@@ -0,0 +1,69 @@
+import logging
+from typing import Dict, List
+from flask import request
+from flask.json import jsonify
+from flask_restful import Resource
+from werkzeug.exceptions import UnsupportedMediaType
+from common.Constants import DEFAULT_CONTEXT_UUID
+from common.Settings import get_setting
+from context.client.ContextClient import ContextClient
+from context.proto.context_pb2 import ServiceId
+from service.client.ServiceClient import ServiceClient
+from service.proto.context_pb2 import Service, ServiceStatusEnum, ServiceTypeEnum
+from .tools.Authentication import HTTP_AUTH
+from .tools.HttpStatusCodes import HTTP_CREATED, HTTP_GATEWAYTIMEOUT, HTTP_NOCONTENT, HTTP_OK, HTTP_SERVERERROR
+
+LOGGER = logging.getLogger(__name__)
+
+class L2VPN_Service(Resource):
+    def __init__(self) -> None:
+        super().__init__()
+        self.context_client = ContextClient(
+            get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
+        self.service_client = ServiceClient(
+            get_setting('SERVICESERVICE_SERVICE_HOST'), get_setting('SERVICESERVICE_SERVICE_PORT_GRPC'))
+
+    @HTTP_AUTH.login_required
+    def get(self, vpn_id : str):
+        LOGGER.debug('VPN_Id: {:s}'.format(str(vpn_id)))
+        LOGGER.debug('Request: {:s}'.format(str(request)))
+
+        # pylint: disable=no-member
+        service_id_request = ServiceId()
+        service_id_request.context_id.context_uuid.uuid = DEFAULT_CONTEXT_UUID
+        service_id_request.service_uuid.uuid = vpn_id
+
+        try:
+            service_reply = self.context_client.GetService(service_id_request)
+            if service_reply.service_id != service_id_request: # pylint: disable=no-member
+                raise Exception('Service retrieval failed. Wrong Service Id was returned')
+
+            service_ready_status = ServiceStatusEnum.SERVICESTATUS_ACTIVE
+            service_status = service_reply.service_status.service_status
+            response = jsonify({})
+            response.status_code = HTTP_OK if service_status == service_ready_status else HTTP_GATEWAYTIMEOUT
+        except Exception as e: # pylint: disable=broad-except
+            LOGGER.exception('Something went wrong Retrieving Service {:s}'.format(str(request)))
+            response = jsonify({'error': str(e)})
+            response.status_code = HTTP_SERVERERROR
+        return response
+
+    @HTTP_AUTH.login_required
+    def delete(self, vpn_id : str):
+        LOGGER.debug('VPN_Id: {:s}'.format(str(vpn_id)))
+        LOGGER.debug('Request: {:s}'.format(str(request)))
+
+        # pylint: disable=no-member
+        service_id_request = ServiceId()
+        service_id_request.context_id.context_uuid.uuid = DEFAULT_CONTEXT_UUID
+        service_id_request.service_uuid.uuid = vpn_id
+
+        try:
+            self.service_client.DeleteService(service_id_request)
+            response = jsonify({})
+            response.status_code = HTTP_NOCONTENT
+        except Exception as e: # pylint: disable=broad-except
+            LOGGER.exception('Something went wrong Deleting Service {:s}'.format(str(request)))
+            response = jsonify({'error': str(e)})
+            response.status_code = HTTP_SERVERERROR
+        return response
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py
new file mode 100644
index 000000000..2ed0293f0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py
@@ -0,0 +1,55 @@
+import logging
+from typing import Dict, List
+from flask import request
+from flask.json import jsonify
+from flask_restful import Resource
+from werkzeug.exceptions import UnsupportedMediaType
+from common.Constants import DEFAULT_CONTEXT_UUID
+from common.Settings import get_setting
+from service.client.ServiceClient import ServiceClient
+from service.proto.context_pb2 import Service, ServiceStatusEnum, ServiceTypeEnum
+from .schemas.vpn_service import SCHEMA_VPN_SERVICE
+from .tools.Authentication import HTTP_AUTH
+from .tools.HttpStatusCodes import HTTP_CREATED, HTTP_SERVERERROR
+from .tools.Validator import validate_message
+
+LOGGER = logging.getLogger(__name__)
+
+class L2VPN_Services(Resource):
+    def __init__(self) -> None:
+        super().__init__()
+        self.service_client = ServiceClient(
+            get_setting('SERVICESERVICE_SERVICE_HOST'), get_setting('SERVICESERVICE_SERVICE_PORT_GRPC'))
+
+    @HTTP_AUTH.login_required
+    def get(self):
+        return {}
+
+    @HTTP_AUTH.login_required
+    def post(self):
+        if not request.is_json: raise UnsupportedMediaType('JSON payload is required')
+        request_data : Dict = request.json
+        LOGGER.debug('Request: {:s}'.format(str(request_data)))
+        validate_message(SCHEMA_VPN_SERVICE, request_data)
+
+        vpn_services : List[Dict] = request_data['ietf-l2vpn-svc:vpn-service']
+        for vpn_service in vpn_services:
+            # pylint: disable=no-member
+            service_request = Service()
+            service_request.service_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_UUID
+            service_request.service_id.service_uuid.uuid = vpn_service['vpn-id']
+            service_request.service_type = ServiceTypeEnum.SERVICETYPE_L3NM
+            service_request.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED
+
+            try:
+                service_reply = self.service_client.CreateService(service_request)
+                if service_reply != service_request.service_id: # pylint: disable=no-member
+                    raise Exception('Service creation failed. Wrong Service Id was returned')
+
+                response = jsonify({})
+                response.status_code = HTTP_CREATED
+            except Exception as e: # pylint: disable=broad-except
+                LOGGER.exception('Something went wrong Creating Service {:s}'.format(str(request)))
+                response = jsonify({'error': str(e)})
+                response.status_code = HTTP_SERVERERROR
+        return response
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
new file mode 100644
index 000000000..639e8c63f
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
@@ -0,0 +1,161 @@
+import json, logging
+from typing import Dict
+from flask import request
+from flask.json import jsonify
+from flask.wrappers import Response
+from flask_restful import Resource
+from werkzeug.exceptions import UnsupportedMediaType
+from common.Constants import DEFAULT_CONTEXT_UUID
+from common.Settings import get_setting
+from context.client.ContextClient import ContextClient
+from context.proto.context_pb2 import Service, ServiceId, ServiceStatusEnum
+from service.client.ServiceClient import ServiceClient
+from .schemas.site_network_access import SCHEMA_SITE_NETWORK_ACCESS
+from .tools.Authentication import HTTP_AUTH
+from .tools.HttpStatusCodes import HTTP_NOCONTENT, HTTP_SERVERERROR
+from .tools.Validator import validate_message
+from .Constants import DEFAULT_ADDRESS_FAMILIES, DEFAULT_MTU, DEFAULT_SUB_INTERFACE_INDEX
+
+LOGGER = logging.getLogger(__name__)
+
+def process_site_network_access(context_client : ContextClient, site_network_access : Dict) -> Service:
+    vpn_id = site_network_access['vpn-attachment']['vpn-id']
+    cvlan_id = site_network_access['connection']['tagged-interface']['dot1q-vlan-tagged']['cvlan-id']
+    bearer_reference = site_network_access['bearer']['bearer-reference']
+
+    # Assume bearer_reference    = '<device_uuid>:<endpoint_uuid>:<router_id>'
+    # Assume route_distinguisher = 0:<cvlan_id>
+    device_uuid,endpoint_uuid,router_id = bearer_reference.split(':')
+    route_distinguisher = '0:{:d}'.format(cvlan_id)
+
+    # pylint: disable=no-member
+    service_id = ServiceId()
+    service_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_UUID
+    service_id.service_uuid.uuid = vpn_id
+
+    service_readonly = context_client.GetService(service_id)
+    service = Service()
+    service.CopyFrom(service_readonly)
+
+    for endpoint_id in service.service_endpoint_ids:                        # pylint: disable=no-member
+        if endpoint_id.device_id.device_uuid.uuid != device_uuid: continue
+        if endpoint_id.endpoint_uuid.uuid != endpoint_uuid: continue
+        break   # found, do nothing
+    else:
+        # not found, add it
+        endpoint_id = service.service_endpoint_ids.add()                    # pylint: disable=no-member
+        endpoint_id.device_id.device_uuid.uuid = device_uuid
+        endpoint_id.endpoint_uuid.uuid = endpoint_uuid
+
+    for config_rule in service.service_config.config_rules:                 # pylint: disable=no-member
+        if config_rule.resource_key != 'settings': continue
+        json_settings = json.loads(config_rule.resource_value)
+
+        if 'route_distinguisher' not in json_settings:                      # missing, add it
+            json_settings['route_distinguisher'] = route_distinguisher
+        elif json_settings['route_distinguisher'] != route_distinguisher:   # differs, raise exception
+            msg = 'Specified RouteDistinguisher({:s}) differs from Service RouteDistinguisher({:s})'
+            raise Exception(msg.format(str(json_settings['route_distinguisher']), str(route_distinguisher)))
+
+        if 'mtu' not in json_settings:                                      # missing, add it
+            json_settings['mtu'] = DEFAULT_MTU
+        elif json_settings['mtu'] != DEFAULT_MTU:                           # differs, raise exception
+            msg = 'Specified MTU({:s}) differs from Service MTU({:s})'
+            raise Exception(msg.format(str(json_settings['mtu']), str(DEFAULT_MTU)))
+
+        if 'address_families' not in json_settings:                         # missing, add it
+            json_settings['address_families'] = DEFAULT_ADDRESS_FAMILIES
+        elif json_settings['address_families'] != DEFAULT_ADDRESS_FAMILIES: # differs, raise exception
+            msg = 'Specified AddressFamilies({:s}) differs from Service AddressFamilies({:s})'
+            raise Exception(msg.format(str(json_settings['address_families']), str(DEFAULT_ADDRESS_FAMILIES)))
+
+        config_rule.resource_value = json.dumps(json_settings, sort_keys=True)
+        break
+    else:
+        # not found, add it
+        config_rule = service.service_config.config_rules.add()             # pylint: disable=no-member
+        config_rule.resource_key = 'settings'
+        config_rule.resource_value = json.dumps({
+            'route_distinguisher': route_distinguisher,
+            'mtu': DEFAULT_MTU,
+            'address_families': DEFAULT_ADDRESS_FAMILIES,
+        }, sort_keys=True)
+
+    endpoint_settings_key = 'device[{:s}]/endpoint[{:s}]/settings'.format(device_uuid, endpoint_uuid)
+    for config_rule in service.service_config.config_rules:                 # pylint: disable=no-member
+        if config_rule.resource_key != endpoint_settings_key: continue
+        json_settings = json.loads(config_rule.resource_value)
+
+        if 'router_id' not in json_settings:                                # missing, add it
+            json_settings['router_id'] = router_id
+        elif json_settings['router_id'] != router_id:                       # differs, raise exception
+            msg = 'Specified RouterId({:s}) differs from Service RouterId({:s})'
+            raise Exception(msg.format(str(json_settings['router_id']), str(router_id)))
+
+        if 'sub_interface_index' not in json_settings:                      # missing, add it
+            json_settings['sub_interface_index'] = DEFAULT_SUB_INTERFACE_INDEX
+        elif json_settings['sub_interface_index'] != DEFAULT_SUB_INTERFACE_INDEX:   # differs, raise exception
+            msg = 'Specified SubInterfaceIndex({:s}) differs from Service SubInterfaceIndex({:s})'
+            raise Exception(msg.format(
+                str(json_settings['sub_interface_index']), str(DEFAULT_SUB_INTERFACE_INDEX)))
+
+        config_rule.resource_value = json.dumps(json_settings, sort_keys=True)
+        break
+    else:
+        # not found, add it
+        config_rule = service.service_config.config_rules.add()             # pylint: disable=no-member
+        config_rule.resource_key = endpoint_settings_key
+        config_rule.resource_value = json.dumps({
+            'router_id': router_id,
+            'sub_interface_index': DEFAULT_SUB_INTERFACE_INDEX,
+        }, sort_keys=True)
+
+    if len(service.service_endpoint_ids) >= 2:
+        service.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_ACTIVE
+
+    return service
+
+def process_list_site_network_access(
+    context_client : ContextClient, service_client : ServiceClient, request_data : Dict) -> Response:
+
+    LOGGER.debug('Request: {:s}'.format(str(request_data)))
+    validate_message(SCHEMA_SITE_NETWORK_ACCESS, request_data)
+
+    errors = []
+    for site_network_access in request_data['ietf-l2vpn-svc:site-network-access']:
+        try:
+            service_request = process_site_network_access(context_client, site_network_access)
+            service_reply = service_client.CreateService(service_request)
+            if service_reply != service_request.service_id: # pylint: disable=no-member
+                raise Exception('Service update failed. Wrong Service Id was returned')
+        except Exception as e: # pylint: disable=broad-except
+            LOGGER.exception('Something went wrong Updating Service {:s}'.format(str(request)))
+            errors.append({'error': str(e)})
+
+    response = jsonify(errors)
+    response.status_code = HTTP_NOCONTENT if len(errors) == 0 else HTTP_SERVERERROR
+    return response
+
+class L2VPN_SiteNetworkAccesses(Resource):
+    def __init__(self) -> None:
+        super().__init__()
+        self.context_client = ContextClient(
+            get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
+        self.service_client = ServiceClient(
+            get_setting('SERVICESERVICE_SERVICE_HOST'), get_setting('SERVICESERVICE_SERVICE_PORT_GRPC'))
+
+    #@HTTP_AUTH.login_required
+    #def get(self):
+    #    return {}
+
+    @HTTP_AUTH.login_required
+    def post(self, site_id : str):
+        if not request.is_json: raise UnsupportedMediaType('JSON payload is required')
+        LOGGER.debug('Site_Id: {:s}'.format(str(site_id)))
+        return process_list_site_network_access(self.context_client, self.service_client, request.json)
+
+    @HTTP_AUTH.login_required
+    def put(self, site_id : str):
+        if not request.is_json: raise UnsupportedMediaType('JSON payload is required')
+        LOGGER.debug('Site_Id: {:s}'.format(str(site_id)))
+        return process_list_site_network_access(self.context_client, self.service_client, request.json)
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py
new file mode 100644
index 000000000..979c8a3bc
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py
@@ -0,0 +1,22 @@
+# RFC 8466 - L2VPN Service Model (L2SM)
+# Ref: https://datatracker.ietf.org/doc/html/rfc8466
+
+from flask_restful import Resource
+from compute.service.rest_server.RestServer import RestServer
+from .L2VPN_Services import L2VPN_Services
+from .L2VPN_Service import L2VPN_Service
+from .L2VPN_SiteNetworkAccesses import L2VPN_SiteNetworkAccesses
+
+URL_PREFIX      = '/ietf-l2vpn-svc:l2vpn-svc'
+
+def _add_resource(rest_server : RestServer, resource : Resource, *urls, **kwargs):
+    urls = [(URL_PREFIX + url) for url in urls]
+    rest_server.add_resource(resource, *urls, **kwargs)
+
+def register_ietf_l2vpn(rest_server : RestServer):
+    _add_resource(rest_server, L2VPN_Services,
+        '/vpn-services')
+    _add_resource(rest_server, L2VPN_Service,
+        '/vpn-services/vpn-service=<vpn_id>', '/vpn-services/vpn-service=<vpn_id>/')
+    _add_resource(rest_server, L2VPN_SiteNetworkAccesses,
+        '/sites/site=<site_id>/site-network-accesses', '/sites/site=<site_id>/site-network-accesses/')
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/Common.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/Common.py
new file mode 100644
index 000000000..f54da792b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/Common.py
@@ -0,0 +1,2 @@
+# String pattern for UUIDs such as '3fd942ee-2dc3-41d1-aeec-65aa85d117b2'
+REGEX_UUID = r'[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12}'
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/site_network_access.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/site_network_access.py
new file mode 100644
index 000000000..33ba8cc7f
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/site_network_access.py
@@ -0,0 +1,66 @@
+# Example request:
+# request = {'ietf-l2vpn-svc:site-network-access': [{
+#     'network-access-id': '3fd942ee-2dc3-41d1-aeec-65aa85d117b2',
+#     'vpn-attachment': {'vpn-id': '954b1b53-4a8c-406d-9eff-750ec2c9a258',
+#         'site-role': 'any-to-any-role'},
+#     'connection': {'encapsulation-type': 'dot1q-vlan-tagged', 'tagged-interface': {
+#         'dot1q-vlan-tagged': {'cvlan-id': 1234}}},
+#     'bearer': {'bearer-reference': '1a'}
+# }]}
+
+from .Common import REGEX_UUID
+
+SCHEMA_SITE_NETWORK_ACCESS = {
+    '$schema': 'https://json-schema.org/draft/2020-12/schema',
+    'type': 'object',
+    'required': ['ietf-l2vpn-svc:site-network-access'],
+    'properties': {
+        'ietf-l2vpn-svc:site-network-access': {
+            'type': 'array',
+            'minItems': 1,
+            'maxItems': 1,  # by now we do not support multiple site-network-access in the same message
+            'items': {
+                'type': 'object',
+                'required': ['network-access-id', 'vpn-attachment', 'connection', 'bearer'],
+                'properties': {
+                    'network-access-id': {'type': 'string', 'pattern': REGEX_UUID},
+                    'vpn-attachment': {
+                        'type': 'object',
+                        'required': ['vpn-id', 'site-role'],
+                        'properties': {
+                            'vpn-id': {'type': 'string', 'pattern': REGEX_UUID},
+                            'site-role': {'type': 'string', 'minLength': 1},
+                        },
+                    },
+                    'connection': {
+                        'type': 'object',
+                        'required': ['encapsulation-type', 'tagged-interface'],
+                        'properties': {
+                            'encapsulation-type': {'enum': ['dot1q-vlan-tagged']},
+                            'tagged-interface': {
+                                'type': 'object',
+                                'required': ['dot1q-vlan-tagged'],
+                                'properties': {
+                                    'dot1q-vlan-tagged': {
+                                        'type': 'object',
+                                        'required': ['cvlan-id'],
+                                        'properties': {
+                                            'cvlan-id': {'type': 'integer', 'minimum': 1, 'maximum': 4094},
+                                        },
+                                    },
+                                },
+                            },
+                        },
+                    },
+                    'bearer': {
+                        'type': 'object',
+                        'required': ['bearer-reference'],
+                        'properties': {
+                            'bearer-reference': {'type': 'string', 'minLength': 1},
+                        },
+                    },
+                },
+            },
+        },
+    },
+}
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/vpn_service.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/vpn_service.py
new file mode 100644
index 000000000..54e9c5316
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/schemas/vpn_service.py
@@ -0,0 +1,32 @@
+# Example request:
+# request = {'ietf-l2vpn-svc:vpn-service': [{
+#   'vpn-id': 'c6270231-f1de-4687-b2ed-7b58f9105775',
+#   'vpn-svc-type': 'vpws',
+#   'svc-topo': 'any-to-any',
+#   'customer-name': 'osm'
+# }]}
+
+from .Common import REGEX_UUID
+
+SCHEMA_VPN_SERVICE = {
+    '$schema': 'https://json-schema.org/draft/2020-12/schema',
+    'type': 'object',
+    'required': ['ietf-l2vpn-svc:vpn-service'],
+    'properties': {
+        'ietf-l2vpn-svc:vpn-service': {
+            'type': 'array',
+            'minItems': 1,
+            'maxItems': 1,  # by now we do not support multiple vpn-service in the same message
+            'items': {
+                'type': 'object',
+                'required': ['vpn-id', 'vpn-svc-type', 'svc-topo', 'customer-name'],
+                'properties': {
+                    'vpn-id': {'type': 'string', 'pattern': REGEX_UUID},
+                    'vpn-svc-type': {'enum': ['vpws']},
+                    'svc-topo': {'enum': ['any-to-any']},
+                    'customer-name': {'const': 'osm'},
+                },
+            }
+        }
+    },
+}
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py
new file mode 100644
index 000000000..de7c9eafd
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py
@@ -0,0 +1,11 @@
+from flask_httpauth import HTTPBasicAuth
+from werkzeug.security import check_password_hash
+from compute.Config import RESTAPI_USERS
+
+HTTP_AUTH = HTTPBasicAuth()
+
+@HTTP_AUTH.verify_password
+def verify_password(username, password):
+    if username not in RESTAPI_USERS: return None
+    if not check_password_hash(RESTAPI_USERS[username], password): return None
+    return username
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py
new file mode 100644
index 000000000..587967010
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py
@@ -0,0 +1,6 @@
+HTTP_OK             = 200
+HTTP_CREATED        = 201
+HTTP_NOCONTENT      = 204
+HTTP_BADREQUEST     = 400
+HTTP_SERVERERROR    = 500
+HTTP_GATEWAYTIMEOUT = 504
\ No newline at end of file
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py
new file mode 100644
index 000000000..9c126d71b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py
@@ -0,0 +1,21 @@
+from typing import List
+from flask.json import jsonify
+from jsonschema import _utils
+from jsonschema.validators import validator_for
+from jsonschema.protocols import Validator
+from jsonschema.exceptions import ValidationError
+from werkzeug.exceptions import BadRequest
+from .HttpStatusCodes import HTTP_BADREQUEST
+
+def validate_message(schema, message):
+    validator_class = validator_for(schema)
+    validator : Validator = validator_class(schema)
+    errors : List[ValidationError] = sorted(validator.iter_errors(message), key=str)
+    if len(errors) == 0: return
+    response = jsonify([
+        {'message': str(error.message), 'schema': str(error.schema), 'validator': str(error.validator),
+         'where': str(_utils.format_as_index(container='message', indices=error.relative_path))}
+        for error in errors
+    ])
+    response.status_code = HTTP_BADREQUEST
+    raise BadRequest(response=response)
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/compute/service/rest_server/resources/Compute.py b/src/compute/service/rest_server/resources/Compute.py
deleted file mode 100644
index 4b845be2e..000000000
--- a/src/compute/service/rest_server/resources/Compute.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import logging
-from flask.json import jsonify
-from flask_restful import Resource
-from common.Settings import get_setting
-from common.Constants import DEFAULT_CONTEXT_UUID
-from service.client.ServiceClient import ServiceClient
-from service.proto.context_pb2 import Service, ServiceStatusEnum, ServiceTypeEnum
-
-LOGGER = logging.getLogger(__name__)
-
-class Compute(Resource):
-    def __init__(self) -> None:
-        super().__init__()
-
-    def get(self):
-        # Here implement HTTP GET method
-        raise NotImplementedError()
-
-    def post(self):
-        # Here implement HTTP POST method
-
-        # Retrieve required data from request
-        new_service_context_id = DEFAULT_CONTEXT_UUID
-        new_service_id = 'my-service-id'
-
-        # Find Service address/port from environment and instantiate client
-        service_host = get_setting('SERVICESERVICE_SERVICE_HOST')
-        service_port = get_setting('SERVICESERVICE_SERVICE_PORT_GRPC')
-        service_client = ServiceClient(service_host, service_port)
-
-        # Compose a dummy CreateService request
-        request = Service()
-        request.service_id.context_id.context_uuid.uuid = new_service_context_id
-        request.service_id.service_uuid.uuid = new_service_id
-        request.service_type = ServiceTypeEnum.SERVICETYPE_L2NM
-        request.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED
-        
-        try:
-            # Issue gRPC request to Service component
-            reply = service_client.CreateService(request)
-
-            # Parse CreateService reply, here we check that obtained service Id and context are the expected ones.
-            reply_context_uuid = reply.context_id.context_uuid.uuid
-            reply_service_uuid = reply.service_uuid.uuid
-            #succeeded = (reply_context_uuid == new_service_context_id) and (reply_service_uuid == new_service_id)
-            succeeded = True
-            reply = {'succeeded': succeeded}
-        except Exception as e:
-            LOGGER.exception('Something went wrong Creating Service {:s}'.format(str(request)))
-            reply = {'succeeded': False, 'error': str(e)}
-
-        return jsonify(reply)
diff --git a/src/compute/tests/MockService.py b/src/compute/tests/MockService.py
new file mode 100644
index 000000000..54b420f5a
--- /dev/null
+++ b/src/compute/tests/MockService.py
@@ -0,0 +1,41 @@
+import grpc, logging
+from concurrent import futures
+
+GRPC_MAX_WORKERS  = 10
+GRPC_GRACE_PERIOD = 60
+
+class MockService:
+    def __init__(self, address, port, max_workers=GRPC_MAX_WORKERS, grace_period=GRPC_GRACE_PERIOD, cls_name=__name__):
+        self.logger = logging.getLogger(cls_name)
+        self.address = address
+        self.port = port
+        self.endpoint = None
+        self.max_workers = max_workers
+        self.grace_period = grace_period
+        self.pool = None
+        self.server = None
+
+    def install_servicers(self):
+        pass
+
+    def start(self):
+        self.endpoint = '{:s}:{:s}'.format(str(self.address), str(self.port))
+        self.logger.info('Starting Service (tentative endpoint: {:s}, max_workers: {:s})...'.format(
+            str(self.endpoint), str(self.max_workers)))
+
+        self.pool = futures.ThreadPoolExecutor(max_workers=self.max_workers)
+        self.server = grpc.server(self.pool) # , interceptors=(tracer_interceptor,))
+
+        self.install_servicers()
+
+        port = self.server.add_insecure_port(self.endpoint)
+        self.endpoint = '{:s}:{:s}'.format(str(self.address), str(port))
+        self.logger.info('Listening on {:s}...'.format(str(self.endpoint)))
+        self.server.start()
+
+        self.logger.debug('Service started')
+
+    def stop(self):
+        self.logger.debug('Stopping service (grace period {:s} seconds)...'.format(str(self.grace_period)))
+        self.server.stop(self.grace_period)
+        self.logger.debug('Service stopped')
diff --git a/src/compute/tests/MockServiceService.py b/src/compute/tests/MockServiceService.py
deleted file mode 100644
index fe90aa4d8..000000000
--- a/src/compute/tests/MockServiceService.py
+++ /dev/null
@@ -1,45 +0,0 @@
-import grpc, logging
-from concurrent import futures
-from service.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD
-from service.proto.service_pb2_grpc import  add_ServiceServiceServicer_to_server
-from .MockServiceServiceServicerImpl import MockServiceServiceServicerImpl
-
-BIND_ADDRESS = '0.0.0.0'
-LOGGER = logging.getLogger(__name__)
-
-class MockServiceService:
-    def __init__(
-        self, address=BIND_ADDRESS, port=GRPC_SERVICE_PORT, max_workers=GRPC_MAX_WORKERS,
-        grace_period=GRPC_GRACE_PERIOD):
-
-        self.address = address
-        self.port = port
-        self.endpoint = None
-        self.max_workers = max_workers
-        self.grace_period = grace_period
-        self.service_servicer = None
-        self.pool = None
-        self.server = None
-
-    def start(self):
-        self.endpoint = '{:s}:{:s}'.format(str(self.address), str(self.port))
-        LOGGER.info('Starting Service (tentative endpoint: {:s}, max_workers: {:s})...'.format(
-            str(self.endpoint), str(self.max_workers)))
-
-        self.pool = futures.ThreadPoolExecutor(max_workers=self.max_workers)
-        self.server = grpc.server(self.pool) # , interceptors=(tracer_interceptor,))
-
-        self.service_servicer = MockServiceServiceServicerImpl()
-        add_ServiceServiceServicer_to_server(self.service_servicer, self.server)
-
-        port = self.server.add_insecure_port(self.endpoint)
-        self.endpoint = '{:s}:{:s}'.format(str(self.address), str(port))
-        LOGGER.info('Listening on {:s}...'.format(str(self.endpoint)))
-        self.server.start()
-
-        LOGGER.debug('Service started')
-
-    def stop(self):
-        LOGGER.debug('Stopping service (grace period {:s} seconds)...'.format(str(self.grace_period)))
-        self.server.stop(self.grace_period)
-        LOGGER.debug('Service stopped')
diff --git a/src/compute/tests/MockServicerImpl_Context.py b/src/compute/tests/MockServicerImpl_Context.py
new file mode 100644
index 000000000..d79a755d4
--- /dev/null
+++ b/src/compute/tests/MockServicerImpl_Context.py
@@ -0,0 +1,188 @@
+import grpc, logging
+from typing import Any, Dict, Iterator, List
+from context.proto.context_pb2 import (
+    Context, ContextEvent, ContextId, ContextIdList, ContextList, Device, DeviceEvent, DeviceId, DeviceIdList,
+    DeviceList, Empty, Link, LinkEvent, LinkId, LinkIdList, LinkList, Service, ServiceEvent, ServiceId, ServiceIdList,
+    ServiceList, Topology, TopologyEvent, TopologyId, TopologyIdList, TopologyList)
+from context.proto.context_pb2_grpc import ContextServiceServicer
+from .Tools import grpc_message_to_json_string
+
+LOGGER = logging.getLogger(__name__)
+
+def get_container(database : Dict[str, Dict[str, Any]], container_name : str) -> Dict[str, Any]:
+    return database.setdefault(container_name, {})
+
+def get_entries(database : Dict[str, Dict[str, Any]], container_name : str) -> List[Any]:
+    container = get_container(database, container_name)
+    return [container[entry_uuid] for entry_uuid in sorted(container.keys())]
+
+def get_entry(
+    context : grpc.ServicerContext, database : Dict[str, Dict[str, Any]], container_name : str, entry_uuid : str
+) -> Any:
+    LOGGER.debug('[get_entry] AFTER database={:s}'.format(str(database)))
+    container = get_container(database, container_name)
+    if entry_uuid not in container:
+        context.abort(grpc.StatusCode.INTERNAL, str('{:s}({:s}) not found'.format(container_name, entry_uuid)))
+    return container[entry_uuid]
+
+def set_entry(database : Dict[str, Dict[str, Any]], container_name : str, entry_uuid : str, entry : Any) -> Any:
+    container = get_container(database, container_name)
+    LOGGER.debug('[set_entry] BEFORE database={:s}'.format(str(database)))
+    container[entry_uuid] = entry
+    LOGGER.debug('[set_entry] AFTER database={:s}'.format(str(database)))
+    return entry
+
+def del_entry(
+    context : grpc.ServicerContext, database : Dict[str, Dict[str, Any]], container_name : str, entry_uuid : str
+) -> Any:
+    container = get_container(database, container_name)
+    if entry_uuid not in container:
+        context.abort(grpc.StatusCode.INTERNAL, str('{:s}({:s}) not found'.format(container_name, entry_uuid)))
+    del container[entry_uuid]
+    return Empty()
+
+class MockServicerImpl_Context(ContextServiceServicer):
+    def __init__(self):
+        LOGGER.info('[__init__] Creating Servicer...')
+        self.database : Dict[str, Any] = {}
+        LOGGER.info('[__init__] Servicer Created')
+
+    # ----- Context ----------------------------------------------------------------------------------------------------
+
+    def ListContextIds(self, request: Empty, context : grpc.ServicerContext) -> ContextIdList:
+        LOGGER.info('[ListContextIds] request={:s}'.format(grpc_message_to_json_string(request)))
+        return ContextIdList(context_ids=[context.context_id for context in get_entries(self.database, 'context')])
+
+    def ListContexts(self, request: Empty, context : grpc.ServicerContext) -> ContextList:
+        LOGGER.info('[ListContexts] request={:s}'.format(grpc_message_to_json_string(request)))
+        return ContextList(contexts=get_entries(self.database, 'context'))
+
+    def GetContext(self, request: ContextId, context : grpc.ServicerContext) -> Context:
+        LOGGER.info('[GetContext] request={:s}'.format(grpc_message_to_json_string(request)))
+        return get_entry(context, self.database, 'context', request.context_uuid.uuid)
+
+    def SetContext(self, request: Context, context : grpc.ServicerContext) -> ContextId:
+        LOGGER.info('[SetContext] request={:s}'.format(grpc_message_to_json_string(request)))
+        return set_entry(self.database, 'context', request.context_uuid.uuid, request).context_id
+
+    def RemoveContext(self, request: ContextId, context : grpc.ServicerContext) -> Empty:
+        LOGGER.info('[RemoveContext] request={:s}'.format(grpc_message_to_json_string(request)))
+        return del_entry(context, self.database, 'context', request.context_uuid.uuid)
+
+    def GetContextEvents(self, request: Empty, context : grpc.ServicerContext) -> Iterator[ContextEvent]:
+        LOGGER.info('[GetContextEvents] request={:s}'.format(grpc_message_to_json_string(request)))
+
+
+    # ----- Topology ---------------------------------------------------------------------------------------------------
+
+    def ListTopologyIds(self, request: ContextId, context : grpc.ServicerContext) -> TopologyIdList:
+        LOGGER.info('[ListTopologyIds] request={:s}'.format(grpc_message_to_json_string(request)))
+        topologies = get_entries(self.database, 'topology[{:s}]'.format(str(request.context_id.context_uuid.uuid)))
+        return TopologyIdList(topology_ids=[topology.topology_id for topology in topologies])
+
+    def ListTopologies(self, request: ContextId, context : grpc.ServicerContext) -> TopologyList:
+        LOGGER.info('[ListTopologies] request={:s}'.format(grpc_message_to_json_string(request)))
+        topologies = get_entries(self.database, 'topology[{:s}]'.format(str(request.context_id.context_uuid.uuid)))
+        return TopologyList(topologies=[topology for topology in topologies])
+
+    def GetTopology(self, request: TopologyId, context : grpc.ServicerContext) -> Topology:
+        LOGGER.info('[GetTopology] request={:s}'.format(grpc_message_to_json_string(request)))
+        container_name = 'topology[{:s}]'.format(str(request.context_id.context_uuid.uuid))
+        return get_entry(context, self.database, container_name, request.topology_uuid.uuid)
+
+    def SetTopology(self, request: Topology, context : grpc.ServicerContext) -> TopologyId:
+        LOGGER.info('[SetTopology] request={:s}'.format(grpc_message_to_json_string(request)))
+        container_name = 'topology[{:s}]'.format(str(request.topology_id.context_id.context_uuid.uuid))
+        return set_entry(self.database, container_name, request.topology_id.topology_uuid.uuid, request).topology_id
+
+    def RemoveTopology(self, request: TopologyId, context : grpc.ServicerContext) -> Empty:
+        LOGGER.info('[RemoveTopology] request={:s}'.format(grpc_message_to_json_string(request)))
+        container_name = 'topology[{:s}]'.format(str(request.context_id.context_uuid.uuid))
+        return del_entry(context, self.database, container_name, request.topology_uuid.uuid)
+
+    def GetTopologyEvents(self, request: Empty, context : grpc.ServicerContext) -> Iterator[TopologyEvent]:
+        LOGGER.info('[GetTopologyEvents] request={:s}'.format(grpc_message_to_json_string(request)))
+
+
+    # ----- Device -----------------------------------------------------------------------------------------------------
+
+    def ListDeviceIds(self, request: Empty, context : grpc.ServicerContext) -> DeviceIdList:
+        LOGGER.info('[ListDeviceIds] request={:s}'.format(grpc_message_to_json_string(request)))
+        return DeviceIdList(device_ids=[device.device_id for device in get_entries(self.database, 'device')])
+
+    def ListDevices(self, request: Empty, context : grpc.ServicerContext) -> DeviceList:
+        LOGGER.info('[ListDevices] request={:s}'.format(grpc_message_to_json_string(request)))
+        return DeviceList(devices=get_entries(self.database, 'device'))
+
+    def GetDevice(self, request: DeviceId, context : grpc.ServicerContext) -> Device:
+        LOGGER.info('[GetDevice] request={:s}'.format(grpc_message_to_json_string(request)))
+        return get_entry(context, self.database, 'device', request.device_uuid.uuid)
+
+    def SetDevice(self, request: Context, context : grpc.ServicerContext) -> DeviceId:
+        LOGGER.info('[SetDevice] request={:s}'.format(grpc_message_to_json_string(request)))
+        return set_entry(self.database, 'device', request.device_uuid.uuid, request).device_id
+
+    def RemoveDevice(self, request: DeviceId, context : grpc.ServicerContext) -> Empty:
+        LOGGER.info('[RemoveDevice] request={:s}'.format(grpc_message_to_json_string(request)))
+        return del_entry(context, self.database, 'device', request.device_uuid.uuid)
+
+    def GetDeviceEvents(self, request: Empty, context : grpc.ServicerContext) -> Iterator[DeviceEvent]:
+        LOGGER.info('[GetDeviceEvents] request={:s}'.format(grpc_message_to_json_string(request)))
+
+
+    # ----- Link -------------------------------------------------------------------------------------------------------
+
+    def ListLinkIds(self, request: Empty, context : grpc.ServicerContext) -> LinkIdList:
+        LOGGER.info('[ListLinkIds] request={:s}'.format(grpc_message_to_json_string(request)))
+        return LinkIdList(link_ids=[link.link_id for link in get_entries(self.database, 'link')])
+
+    def ListLinks(self, request: Empty, context : grpc.ServicerContext) -> LinkList:
+        LOGGER.info('[ListLinks] request={:s}'.format(grpc_message_to_json_string(request)))
+        return LinkList(links=get_entries(self.database, 'link'))
+
+    def GetLink(self, request: LinkId, context : grpc.ServicerContext) -> Link:
+        LOGGER.info('[GetLink] request={:s}'.format(grpc_message_to_json_string(request)))
+        return get_entry(context, self.database, 'link', request.link_uuid.uuid)
+
+    def SetLink(self, request: Context, context : grpc.ServicerContext) -> LinkId:
+        LOGGER.info('[SetLink] request={:s}'.format(grpc_message_to_json_string(request)))
+        return set_entry(self.database, 'link', request.link_uuid.uuid, request).link_id
+
+    def RemoveLink(self, request: LinkId, context : grpc.ServicerContext) -> Empty:
+        LOGGER.info('[RemoveLink] request={:s}'.format(grpc_message_to_json_string(request)))
+        return del_entry(context, self.database, 'link', request.link_uuid.uuid)
+
+    def GetLinkEvents(self, request: Empty, context : grpc.ServicerContext) -> Iterator[LinkEvent]:
+        LOGGER.info('[GetLinkEvents] request={:s}'.format(grpc_message_to_json_string(request)))
+
+
+    # ----- Service ----------------------------------------------------------------------------------------------------
+
+    def ListServiceIds(self, request: ContextId, context : grpc.ServicerContext) -> ServiceIdList:
+        LOGGER.info('[ListServiceIds] request={:s}'.format(grpc_message_to_json_string(request)))
+        services = get_entries(self.database, 'service[{:s}]'.format(str(request.context_id.context_uuid.uuid)))
+        return ServiceIdList(service_ids=[service.service_id for service in services])
+
+    def ListServices(self, request: ContextId, context : grpc.ServicerContext) -> ServiceList:
+        LOGGER.info('[ListServices] request={:s}'.format(grpc_message_to_json_string(request)))
+        services = get_entries(self.database, 'service[{:s}]'.format(str(request.context_id.context_uuid.uuid)))
+        return ServiceList(services=[service for service in services])
+
+    def GetService(self, request: ServiceId, context : grpc.ServicerContext) -> Service:
+        LOGGER.info('[GetService] request={:s}'.format(grpc_message_to_json_string(request)))
+        container_name = 'service[{:s}]'.format(str(request.context_id.context_uuid.uuid))
+        return get_entry(context, self.database, container_name, request.service_uuid.uuid)
+
+    def SetService(self, request: Service, context : grpc.ServicerContext) -> ServiceId:
+        LOGGER.info('[SetService] request={:s}'.format(grpc_message_to_json_string(request)))
+        return set_entry(
+            self.database, 'service[{:s}]'.format(str(request.service_id.context_id.context_uuid.uuid)),
+            request.service_id.service_uuid.uuid, request).service_id
+
+    def RemoveService(self, request: ServiceId, context : grpc.ServicerContext) -> Empty:
+        LOGGER.info('[RemoveService] request={:s}'.format(grpc_message_to_json_string(request)))
+        container_name = 'service[{:s}]'.format(str(request.context_id.context_uuid.uuid))
+        return del_entry(context, self.database, container_name, request.service_uuid.uuid)
+
+    def GetServiceEvents(self, request: Empty, context : grpc.ServicerContext) -> Iterator[ServiceEvent]:
+        LOGGER.info('[GetServiceEvents] request={:s}'.format(grpc_message_to_json_string(request)))
diff --git a/src/compute/tests/MockServiceServiceServicerImpl.py b/src/compute/tests/MockServicerImpl_Service.py
similarity index 59%
rename from src/compute/tests/MockServiceServiceServicerImpl.py
rename to src/compute/tests/MockServicerImpl_Service.py
index 35da85407..75fdc3073 100644
--- a/src/compute/tests/MockServiceServiceServicerImpl.py
+++ b/src/compute/tests/MockServicerImpl_Service.py
@@ -1,27 +1,31 @@
-import grpc, json, logging
-from google.protobuf.json_format import MessageToDict
+import grpc, logging
+from common.Settings import get_setting
+from context.client.ContextClient import ContextClient
 from service.proto.context_pb2 import ConnectionList, Empty, Service, ServiceId
 from service.proto.service_pb2_grpc import ServiceServiceServicer
+from .Tools import grpc_message_to_json_string
 
 LOGGER = logging.getLogger(__name__)
 
-def grpc_message_to_json_string(message):
-    return json.dumps(MessageToDict(
-        message, including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False),
-        sort_keys=True)
+class MockServicerImpl_Service(ServiceServiceServicer):
+    def __init__(self):
+        LOGGER.info('[__init__] Creating Servicer...')
+        self.context_client = ContextClient(
+            get_setting('CONTEXTSERVICE_SERVICE_HOST'),
+            get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
+        LOGGER.info('[__init__] Servicer Created')
 
-class MockServiceServiceServicerImpl(ServiceServiceServicer):
     def CreateService(self, request : Service, context : grpc.ServicerContext) -> ServiceId:
         LOGGER.info('[CreateService] request={:s}'.format(grpc_message_to_json_string(request)))
-        return request.service_id
+        return self.context_client.SetService(request)
 
     def UpdateService(self, request : Service, context : grpc.ServicerContext) -> ServiceId:
         LOGGER.info('[UpdateService] request={:s}'.format(grpc_message_to_json_string(request)))
-        return request.service_id
+        return self.context_client.SetService(request)
 
     def DeleteService(self, request : ServiceId, context : grpc.ServicerContext) -> Empty:
         LOGGER.info('[DeleteService] request={:s}'.format(grpc_message_to_json_string(request)))
-        return Empty()
+        return self.context_client.RemoveService(request)
 
     def GetConnectionList(self, request : ServiceId, context : grpc.ServicerContext) -> ConnectionList:
         LOGGER.info('[GetConnectionList] request={:s}'.format(grpc_message_to_json_string(request)))
diff --git a/src/compute/tests/Tools.py b/src/compute/tests/Tools.py
new file mode 100644
index 000000000..a96c38ce5
--- /dev/null
+++ b/src/compute/tests/Tools.py
@@ -0,0 +1,7 @@
+import json
+from google.protobuf.json_format import MessageToDict
+
+def grpc_message_to_json_string(message):
+    return json.dumps(MessageToDict(
+        message, including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False),
+        sort_keys=True)
diff --git a/src/compute/tests/mock_osm/MockOSM.py b/src/compute/tests/mock_osm/MockOSM.py
index f98cfed7a..c50ee6c88 100644
--- a/src/compute/tests/mock_osm/MockOSM.py
+++ b/src/compute/tests/mock_osm/MockOSM.py
@@ -5,43 +5,90 @@ LOGGER = logging.getLogger(__name__)
 
 WIM_USERNAME = 'admin'
 WIM_PASSWORD = 'admin'
-WIM_MAPPING  = []
 
-SERVICE_TYPE = 'ELAN'
+# Ref: https://osm.etsi.org/wikipub/index.php/WIM
+WIM_MAPPING  = [
+    {
+        'device-id'           : 'dev-1',            # pop_switch_dpid
+        #'device_interface_id' : ??,                # pop_switch_port
+        'service_endpoint_id' : 'ep-1',             # wan_service_endpoint_id
+        'service_mapping_info': {                   # wan_service_mapping_info, other extra info
+            'bearer': {'bearer-reference': 'dev-1:ep-1:10.0.0.1'},
+            'site-id': '1',
+        },
+        #'switch_dpid'         : ??,                # wan_switch_dpid
+        #'switch_port'         : ??,                # wan_switch_port
+        #'datacenter_id'       : ??,                # vim_account
+    },
+    {
+        'device-id'           : 'dev-2',            # pop_switch_dpid
+        #'device_interface_id' : ??,                # pop_switch_port
+        'service_endpoint_id' : 'ep-2',             # wan_service_endpoint_id
+        'service_mapping_info': {                   # wan_service_mapping_info, other extra info
+            'bearer': {'bearer-reference': 'dev-2:ep-2:10.0.0.2'},
+            'site-id': '2',
+        },
+        #'switch_dpid'         : ??,                # wan_switch_dpid
+        #'switch_port'         : ??,                # wan_switch_port
+        #'datacenter_id'       : ??,                # vim_account
+    },
+    {
+        'device-id'           : 'dev-3',            # pop_switch_dpid
+        #'device_interface_id' : ??,                # pop_switch_port
+        'service_endpoint_id' : 'ep-3',             # wan_service_endpoint_id
+        'service_mapping_info': {                   # wan_service_mapping_info, other extra info
+            'bearer': {'bearer-reference': 'dev-3:ep-3:10.0.0.3'},
+            'site-id': '3',
+        },
+        #'switch_dpid'         : ??,                # wan_switch_dpid
+        #'switch_port'         : ??,                # wan_switch_port
+        #'datacenter_id'       : ??,                # vim_account
+    },
+]
+
+SERVICE_TYPE = 'ELINE'
+SERVICE_CONNECTION_POINTS_1 = [
+    {'service_endpoint_id': 'ep-1',
+        'service_endpoint_encapsulation_type': 'dot1q',
+        'service_endpoint_encapsulation_info': {'vlan': 1234}},
+    {'service_endpoint_id': 'ep-2',
+        'service_endpoint_encapsulation_type': 'dot1q',
+        'service_endpoint_encapsulation_info': {'vlan': 1234}},
+]
+
+SERVICE_CONNECTION_POINTS_2 = [
+    {'service_endpoint_id': 'ep-3',
+        'service_endpoint_encapsulation_type': 'dot1q',
+        'service_endpoint_encapsulation_info': {'vlan': 1234}},
+]
 
 class MockOSM:
     def __init__(self, wim_url):
         wim = {'wim_url': wim_url}
         wim_account = {'user': WIM_USERNAME, 'password': WIM_PASSWORD}
-        config = {'service_endpoint_mapping': WIM_MAPPING}
+        config = {'mapping_not_needed': False, 'service_endpoint_mapping': WIM_MAPPING}
         self.wim = WimconnectorIETFL2VPN(wim, wim_account, config=config)
         self.service_uuid = None
+        self.conn_info = None
 
     def create_connectivity_service(self):
-        connection_points = []
         self.wim.check_credentials()
-        LOGGER.info('[create_connectivity_service] connection_points={:s}'.format(str(connection_points)))
-        result = self.wim.create_connectivity_service(SERVICE_TYPE, connection_points)
+        LOGGER.info('[create_connectivity_service] connection_points={:s}'.format(str(SERVICE_CONNECTION_POINTS_1)))
+        result = self.wim.create_connectivity_service(SERVICE_TYPE, SERVICE_CONNECTION_POINTS_1)
         LOGGER.info('[create_connectivity_service] result={:s}'.format(str(result)))
-        self.service_uuid = None
+        self.service_uuid, self.conn_info = result
 
     def get_connectivity_service_status(self):
-        connection_points = []
         self.wim.check_credentials()
-        LOGGER.info('[get_connectivity_service] connection_points={:s}'.format(str(connection_points)))
-        result = self.wim.get_connectivity_service_status(self.service_uuid, conn_info=conn_info)
+        result = self.wim.get_connectivity_service_status(self.service_uuid, conn_info=self.conn_info)
         LOGGER.info('[get_connectivity_service] result={:s}'.format(str(result)))
 
     def edit_connectivity_service(self):
-        connection_points = []
         self.wim.check_credentials()
-        LOGGER.info('[edit_connectivity_service] connection_points={:s}'.format(str(connection_points)))
-        result = self.wim.edit_connectivity_service(self.service_uuid, conn_info=conn_info, connection_points=connection_points)
-        LOGGER.info('[edit_connectivity_service] result={:s}'.format(str(result)))
+        LOGGER.info('[edit_connectivity_service] connection_points={:s}'.format(str(SERVICE_CONNECTION_POINTS_2)))
+        self.wim.edit_connectivity_service(
+            self.service_uuid, conn_info=self.conn_info, connection_points=SERVICE_CONNECTION_POINTS_2)
 
     def delete_connectivity_service(self):
-        connection_points = []
         self.wim.check_credentials()
-        LOGGER.info('[delete_connectivity_service] connection_points={:s}'.format(str(connection_points)))
-        result = self.wim.delete_connectivity_service(self.service_uuid, conn_info=conn_info)
-        LOGGER.info('[delete_connectivity_service] result={:s}'.format(str(result)))
+        self.wim.delete_connectivity_service(self.service_uuid, conn_info=self.conn_info)
diff --git a/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py b/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py
index f47c56dc8..182115bad 100644
--- a/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py
+++ b/src/compute/tests/mock_osm/WimconnectorIETFL2VPN.py
@@ -54,7 +54,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase):
             m["service_endpoint_id"]: m for m in self.service_endpoint_mapping
         }
         self.user = wim_account.get("user")
-        self.passwd = wim_account.get("passwordd")
+        self.passwd = wim_account.get("password")           # replace "passwordd" -> "password"
 
         if self.user and self.passwd is not None:
             self.auth = (self.user, self.passwd)
@@ -177,7 +177,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase):
             uuid_l2vpn = str(uuid.uuid4())
             vpn_service = {}
             vpn_service["vpn-id"] = uuid_l2vpn
-            vpn_service["vpn-scv-type"] = "vpws"
+            vpn_service["vpn-svc-type"] = "vpws"            # Rename "vpn-scv-type" -> "vpn-svc-type"
             vpn_service["svc-topo"] = "any-to-any"
             vpn_service["customer-name"] = "osm"
             vpn_service_list = []
diff --git a/src/compute/tests/test_unitary.py b/src/compute/tests/test_unitary.py
index 6935ac2a8..001999f1b 100644
--- a/src/compute/tests/test_unitary.py
+++ b/src/compute/tests/test_unitary.py
@@ -1,34 +1,54 @@
 import logging, os, pytest, time
 from compute.Config import RESTAPI_SERVICE_PORT, RESTAPI_BASE_URL
-from compute.service.rest_server.Server import Server
-from compute.service.rest_server.resources.Compute import Compute
-from service.Config import (
-    GRPC_SERVICE_PORT as SERVICE_GRPC_SERVICE_PORT, GRPC_MAX_WORKERS as SERVICE_GRPC_MAX_WORKERS,
-    GRPC_GRACE_PERIOD as SERVICE_GRPC_GRACE_PERIOD)
+from compute.service.rest_server.RestServer import RestServer
+from context.proto.context_pb2_grpc import add_ContextServiceServicer_to_server
+from service.proto.service_pb2_grpc import add_ServiceServiceServicer_to_server
 from .mock_osm.MockOSM import MockOSM
-from .MockServiceService import MockServiceService
-
-compute_restapi_port = 10000 + RESTAPI_SERVICE_PORT # avoid privileged ports
-service_grpc_port = 10000 + SERVICE_GRPC_SERVICE_PORT # avoid privileged ports
-
-os.environ['SERVICESERVICE_SERVICE_HOST'] = '127.0.0.1'
-os.environ['SERVICESERVICE_SERVICE_PORT_GRPC'] = str(service_grpc_port)
+from .MockService import MockService
+from .MockServicerImpl_Context import MockServicerImpl_Context
+from .MockServicerImpl_Service import MockServicerImpl_Service
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
+LOCALHOST = '127.0.0.1'
+MOCKSERVER_GRPC_PORT = 10000
+COMPUTE_RESTAPI_PORT = 10000 + RESTAPI_SERVICE_PORT # avoid privileged ports
+
+class MockService_ContextService(MockService):
+    # Mock Server implementing Context and Service to simplify unitary tests of Compute
+
+    def __init__(self, cls_name='MockService_Service'):
+        super().__init__(LOCALHOST, MOCKSERVER_GRPC_PORT, cls_name=cls_name)
+
+    # pylint: disable=attribute-defined-outside-init
+    def install_servicers(self):
+        self.context_servicer = MockServicerImpl_Context()
+        add_ContextServiceServicer_to_server(self.context_servicer, self.server)
+        self.service_servicer = MockServicerImpl_Service()
+        add_ServiceServiceServicer_to_server(self.service_servicer, self.server)
+
+os.environ['CONTEXTSERVICE_SERVICE_HOST'] = LOCALHOST
+os.environ['CONTEXTSERVICE_SERVICE_PORT_GRPC'] = str(MOCKSERVER_GRPC_PORT)
+os.environ['SERVICESERVICE_SERVICE_HOST'] = LOCALHOST
+os.environ['SERVICESERVICE_SERVICE_PORT_GRPC'] = str(MOCKSERVER_GRPC_PORT)
+
+# NBI Plugin IETF L2VPN requires environment variables CONTEXTSERVICE_SERVICE_HOST, CONTEXTSERVICE_SERVICE_PORT_GRPC,
+# SERVICESERVICE_SERVICE_HOST, and SERVICESERVICE_SERVICE_PORT_GRPC to work properly.
+# pylint: disable=wrong-import-position,ungrouped-imports
+from compute.service.rest_server.nbi_plugins.ietf_l2vpn import register_ietf_l2vpn
+
 @pytest.fixture(scope='session')
-def service_service():
-    _service = MockServiceService(
-        port=service_grpc_port, max_workers=SERVICE_GRPC_MAX_WORKERS, grace_period=SERVICE_GRPC_GRACE_PERIOD)
+def mockservice():
+    _service = MockService_ContextService()
     _service.start()
     yield _service
     _service.stop()
 
 @pytest.fixture(scope='session')
-def compute_service_rest(service_service):
-    _rest_server = Server(port=compute_restapi_port, base_url=RESTAPI_BASE_URL)
-    _rest_server.add_resource(Compute, '/vpn-services', endpoint='l2vpn.vpn-services')
+def compute_service_rest(mockservice):  # pylint: disable=redefined-outer-name
+    _rest_server = RestServer(port=COMPUTE_RESTAPI_PORT, base_url=RESTAPI_BASE_URL)
+    register_ietf_l2vpn(_rest_server)
     _rest_server.start()
     time.sleep(1) # bring time for the server to start
     yield _rest_server
@@ -36,8 +56,8 @@ def compute_service_rest(service_service):
     _rest_server.join()
 
 @pytest.fixture(scope='session')
-def osm_wim(service_service, compute_service_rest): # pylint: disable=redefined-outer-name
-    wim_url = 'http://127.0.0.1:{:d}'.format(compute_restapi_port)
+def osm_wim(compute_service_rest): # pylint: disable=redefined-outer-name
+    wim_url = 'http://{:s}:{:d}'.format(LOCALHOST, COMPUTE_RESTAPI_PORT)
     return MockOSM(wim_url)
 
 def test_compute_create_connectivity_service_rest_api(osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-- 
GitLab


From b32528f8f6a8ec6af133abf22bdddb7d0a06cde1 Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Wed, 5 Jan 2022 21:25:45 +0100
Subject: [PATCH 003/229] Added Compute to GitLab CI pipeline

---
 .gitlab-ci.yml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1e35c2cb3..c8f78f4df 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -13,6 +13,7 @@ include:
   - local: '/manifests/.gitlab-ci.yml'
   - local: '/src/monitoring/.gitlab-ci.yml'
   #- local: '/src/centralizedattackdetector/.gitlab-ci.yml'
+  - local: '/src/compute/.gitlab-ci.yml'
   - local: '/src/context/.gitlab-ci.yml'
   - local: '/src/device/.gitlab-ci.yml'
   - local: '/src/service/.gitlab-ci.yml'
-- 
GitLab


From 7b2df93a758a383a0c455d29757cf5c78061559f Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Wed, 5 Jan 2022 22:14:22 +0100
Subject: [PATCH 004/229] Solve minor issue in unitary test of Context that
 prevented tests to finish correctly in random cases.

---
 src/context/tests/test_unitary.py | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/src/context/tests/test_unitary.py b/src/context/tests/test_unitary.py
index 750fa2a31..bf8857f70 100644
--- a/src/context/tests/test_unitary.py
+++ b/src/context/tests/test_unitary.py
@@ -318,16 +318,22 @@ def test_grpc_topology(
     assert response.context_uuid.uuid == DEFAULT_CONTEXT_UUID
 
     # ----- Check create event -----------------------------------------------------------------------------------------
-    event = events_collector.get_event(block=True)
-    assert isinstance(event, TopologyEvent)
-    assert event.event.event_type == EventTypeEnum.EVENTTYPE_CREATE
-    assert event.topology_id.context_id.context_uuid.uuid == DEFAULT_CONTEXT_UUID
-    assert event.topology_id.topology_uuid.uuid == DEFAULT_TOPOLOGY_UUID
-
-    event = events_collector.get_event(block=True)
-    assert isinstance(event, ContextEvent)
-    assert event.event.event_type == EventTypeEnum.EVENTTYPE_UPDATE
-    assert event.context_id.context_uuid.uuid == DEFAULT_CONTEXT_UUID
+    context_event = None
+    topology_event = None
+    for _ in range(2):
+        event = events_collector.get_event(block=True)
+        assert isinstance(event, ContextEvent, TopologyEvent)
+        if isinstance(event, ContextEvent): context_event = event
+        if isinstance(event, TopologyEvent): topology_event = event
+
+    assert context_event is not None
+    assert context_event.event.event_type == EventTypeEnum.EVENTTYPE_UPDATE
+    assert context_event.context_id.context_uuid.uuid == DEFAULT_CONTEXT_UUID
+
+    assert topology_event is not None
+    assert topology_event.event.event_type == EventTypeEnum.EVENTTYPE_CREATE
+    assert topology_event.topology_id.context_id.context_uuid.uuid == DEFAULT_CONTEXT_UUID
+    assert topology_event.topology_id.topology_uuid.uuid == DEFAULT_TOPOLOGY_UUID
 
     # ----- Update the object ------------------------------------------------------------------------------------------
     response = context_client_grpc.SetTopology(Topology(**TOPOLOGY))
-- 
GitLab


From a81f447b0d2161b7b4412bfad5a38bcdf72ab454 Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Fri, 7 Jan 2022 09:59:46 +0100
Subject: [PATCH 005/229] Fixing Gitlab CI for Context and Compute components

---
 manifests/computeservice.yaml     | 10 ++++++++++
 manifests/contextservice.yaml     |  2 ++
 src/context/tests/test_unitary.py |  2 +-
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/manifests/computeservice.yaml b/manifests/computeservice.yaml
index cdca52eb8..73380f75d 100644
--- a/manifests/computeservice.yaml
+++ b/manifests/computeservice.yaml
@@ -17,6 +17,7 @@ spec:
         image: registry.gitlab.com/teraflow-h2020/controller/compute:latest
         imagePullPolicy: Always
         ports:
+        - containerPort: 8080
         - containerPort: 9090
         env:
         - name: LOG_LEVEL
@@ -44,7 +45,12 @@ spec:
   selector:
     app: computeservice
   ports:
+  - name: http
+    protocol: TCP
+    port: 8080
+    targetPort: 8080
   - name: grpc
+    protocol: TCP
     port: 9090
     targetPort: 9090
 ---
@@ -59,6 +65,10 @@ spec:
   selector:
     app: computeservice
   ports:
+  - name: http
+    protocol: TCP
+    port: 8080
+    targetPort: 8080
   - name: grpc
     protocol: TCP
     port: 9090
diff --git a/manifests/contextservice.yaml b/manifests/contextservice.yaml
index c0ea046e0..6c72da1dd 100644
--- a/manifests/contextservice.yaml
+++ b/manifests/contextservice.yaml
@@ -64,9 +64,11 @@ spec:
     app: contextservice
   ports:
   - name: grpc
+    protocol: TCP
     port: 1010
     targetPort: 1010
   - name: http
+    protocol: TCP
     port: 8080
     targetPort: 8080
 ---
diff --git a/src/context/tests/test_unitary.py b/src/context/tests/test_unitary.py
index bf8857f70..5836511e1 100644
--- a/src/context/tests/test_unitary.py
+++ b/src/context/tests/test_unitary.py
@@ -322,7 +322,7 @@ def test_grpc_topology(
     topology_event = None
     for _ in range(2):
         event = events_collector.get_event(block=True)
-        assert isinstance(event, ContextEvent, TopologyEvent)
+        assert isinstance(event, (ContextEvent, TopologyEvent))
         if isinstance(event, ContextEvent): context_event = event
         if isinstance(event, TopologyEvent): topology_event = event
 
-- 
GitLab


From 304ecc9c48fb722ddd0b7b4ab8cc9f66f7916354 Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Fri, 7 Jan 2022 10:07:38 +0100
Subject: [PATCH 006/229] Fixing Gitlab CI for Compute component

---
 src/compute/service/ComputeService.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/compute/service/ComputeService.py b/src/compute/service/ComputeService.py
index 36d43283c..51a15472b 100644
--- a/src/compute/service/ComputeService.py
+++ b/src/compute/service/ComputeService.py
@@ -24,9 +24,9 @@ class ComputeService:
         self.server = None
 
     def start(self):
-        self.endpoint = '{}:{}'.format(self.address, self.port)
-        LOGGER.debug('Starting Service (tentative endpoint: {}, max_workers: {})...'.format(
-            self.endpoint, self.max_workers))
+        self.endpoint = '{:s}:{:s}'.format(str(self.address), str(self.port))
+        LOGGER.debug('Starting Service (tentative endpoint: {:s}, max_workers: {:s})...'.format(
+            str(self.endpoint), str(self.max_workers)))
 
         self.pool = futures.ThreadPoolExecutor(max_workers=self.max_workers)
         self.server = grpc.server(self.pool) # , interceptors=(tracer_interceptor,))
@@ -39,15 +39,15 @@ class ComputeService:
         add_HealthServicer_to_server(self.health_servicer, self.server)
 
         port = self.server.add_insecure_port(self.endpoint)
-        self.endpoint = '{}:{}'.format(self.address, port)
-        LOGGER.info('Listening on {}...'.format(self.endpoint))
+        self.endpoint = '{:s}:{:s}'.format(str(self.address), str(port))
+        LOGGER.info('Listening on {:s}...'.format(str(self.endpoint)))
         self.server.start()
         self.health_servicer.set(OVERALL_HEALTH, HealthCheckResponse.SERVING) # pylint: disable=maybe-no-member
 
         LOGGER.debug('Service started')
 
     def stop(self):
-        LOGGER.debug('Stopping service (grace period {} seconds)...'.format(self.grace_period))
+        LOGGER.debug('Stopping service (grace period {:s} seconds)...'.format(str(self.grace_period)))
         self.health_servicer.enter_graceful_shutdown()
         self.server.stop(self.grace_period)
         LOGGER.debug('Service stopped')
-- 
GitLab


From 018a46de7c8701ce6b38f7cb905e7e452a2ff6ba Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Fri, 7 Jan 2022 10:17:33 +0100
Subject: [PATCH 007/229] Fixing GitLab CI for Compute

---
 src/compute/.gitlab-ci.yml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/compute/.gitlab-ci.yml b/src/compute/.gitlab-ci.yml
index 948092ea3..cc0ca4213 100644
--- a/src/compute/.gitlab-ci.yml
+++ b/src/compute/.gitlab-ci.yml
@@ -36,9 +36,10 @@ unit test compute:
     - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi
   script:
     - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-    - docker run --name $IMAGE_NAME -d -p 9090:9090 --network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
+    - docker run --name $IMAGE_NAME -d -p 9090:9090 --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
     - sleep 5
     - docker ps -a
+    - docker logs $IMAGE_NAME
     - docker exec -i $IMAGE_NAME bash -c "pytest --log-level=DEBUG --verbose $IMAGE_NAME/tests/test_unitary.py"
   after_script:
     - docker rm -f $IMAGE_NAME
-- 
GitLab


From 0a5b780794ee348e5b3b8803aafb0756d4caacd4 Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Fri, 7 Jan 2022 10:20:14 +0100
Subject: [PATCH 008/229] Fixing GitLab CI for Compute

---
 src/compute/Dockerfile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/compute/Dockerfile b/src/compute/Dockerfile
index 83e4fad35..4eabaf912 100644
--- a/src/compute/Dockerfile
+++ b/src/compute/Dockerfile
@@ -30,6 +30,7 @@ RUN python3 -m pip install -r compute/requirements.in
 # Add files into working directory
 COPY common/. common
 COPY compute/. compute
+COPY service/. service
 
 # Start compute service
 ENTRYPOINT ["python", "-m", "compute.service"]
-- 
GitLab


From fa12e93c219d62378a8afc113b7ff3ff6d016494 Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Fri, 7 Jan 2022 10:22:41 +0100
Subject: [PATCH 009/229] Fixing GitLab CI for Compute

---
 src/compute/Dockerfile | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/compute/Dockerfile b/src/compute/Dockerfile
index 4eabaf912..99d4e3ed1 100644
--- a/src/compute/Dockerfile
+++ b/src/compute/Dockerfile
@@ -30,6 +30,7 @@ RUN python3 -m pip install -r compute/requirements.in
 # Add files into working directory
 COPY common/. common
 COPY compute/. compute
+COPY context/. context
 COPY service/. service
 
 # Start compute service
-- 
GitLab


From 8c8cb30396aae0ef91cdff41c28893d19fc29c73 Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Fri, 7 Jan 2022 10:24:28 +0100
Subject: [PATCH 010/229] Fixing GitLab CI for Compute

---
 src/compute/requirements.in | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/compute/requirements.in b/src/compute/requirements.in
index a8029e523..42a56f905 100644
--- a/src/compute/requirements.in
+++ b/src/compute/requirements.in
@@ -7,3 +7,4 @@ jsonschema
 prometheus-client
 pytest
 pytest-benchmark
+requests
-- 
GitLab


From 160900f33d7411e60cf4bbaaa60683b77258394c Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Fri, 7 Jan 2022 10:32:04 +0100
Subject: [PATCH 011/229] Fixing GitLab CI for Compute

---
 src/context/.gitlab-ci.yml | 5 +++--
 src/device/.gitlab-ci.yml  | 3 ++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/context/.gitlab-ci.yml b/src/context/.gitlab-ci.yml
index 23949213f..9fbad71bc 100644
--- a/src/context/.gitlab-ci.yml
+++ b/src/context/.gitlab-ci.yml
@@ -38,10 +38,11 @@ unit test context:
   script:
     - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker pull "redis:6.2"
-    - docker run --name redis -d --network=teraflowbridge --rm redis:6.2
-    - docker run --name $IMAGE_NAME -d -p 1010:1010 --env "DB_BACKEND=redis" --env "REDIS_SERVICE_HOST=redis" --env "REDIS_SERVICE_PORT=6379" --env "REDIS_DATABASE_ID=0" --network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
+    - docker run --name redis -d --network=teraflowbridge redis:6.2
+    - docker run --name $IMAGE_NAME -d -p 1010:1010 --env "DB_BACKEND=redis" --env "REDIS_SERVICE_HOST=redis" --env "REDIS_SERVICE_PORT=6379" --env "REDIS_DATABASE_ID=0" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
     - sleep 10
     - docker ps -a
+    - docker logs $IMAGE_NAME
     - docker exec -i $IMAGE_NAME bash -c "pytest --log-level=DEBUG --verbose $IMAGE_NAME/tests/test_unitary.py"
   after_script:
     - docker rm -f $IMAGE_NAME
diff --git a/src/device/.gitlab-ci.yml b/src/device/.gitlab-ci.yml
index 8656e01fe..5868c6884 100644
--- a/src/device/.gitlab-ci.yml
+++ b/src/device/.gitlab-ci.yml
@@ -36,9 +36,10 @@ unit test device:
     - if docker container ls | grep $IMAGE_NAME; then docker rm -f $IMAGE_NAME; else echo "$IMAGE_NAME image is not in the system"; fi
   script:
     - docker pull "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-    - docker run --name $IMAGE_NAME -d -p 2020:2020 --network=teraflowbridge --rm $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
+    - docker run --name $IMAGE_NAME -d -p 2020:2020 --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
     - sleep 5
     - docker ps -a
+    - docker logs $IMAGE_NAME
     - docker exec -i $IMAGE_NAME bash -c "pytest --log-level=DEBUG --verbose $IMAGE_NAME/tests/test_unitary.py"
   after_script:
     - docker rm -f $IMAGE_NAME
-- 
GitLab


From 0d12a3f653077bee6845754bbe754f89fa33fa10 Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Fri, 7 Jan 2022 11:36:06 +0100
Subject: [PATCH 012/229] Fixing GitLab CI for Compute

---
 manifests/contextservice.yaml | 2 ++
 src/compute/.gitlab-ci.yml    | 4 ++--
 src/context/.gitlab-ci.yml    | 4 ++--
 src/device/.gitlab-ci.yml     | 4 ++--
 src/service/.gitlab-ci.yml    | 4 ++--
 5 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/manifests/contextservice.yaml b/manifests/contextservice.yaml
index 6c72da1dd..7ccf3e4f0 100644
--- a/manifests/contextservice.yaml
+++ b/manifests/contextservice.yaml
@@ -34,6 +34,8 @@ spec:
         env:
         - name: DB_BACKEND
           value: "redis"
+        - name: MB_BACKEND
+          value: "redis"
         - name: REDIS_DATABASE_ID
           value: "0"
         - name: LOG_LEVEL
diff --git a/src/compute/.gitlab-ci.yml b/src/compute/.gitlab-ci.yml
index cc0ca4213..d10d5acfb 100644
--- a/src/compute/.gitlab-ci.yml
+++ b/src/compute/.gitlab-ci.yml
@@ -10,8 +10,8 @@ build compute:
     - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-#  after_script:
-#    - docker rmi $(docker images --quiet --filter=dangling=true)
+  after_script:
+    - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
     - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
diff --git a/src/context/.gitlab-ci.yml b/src/context/.gitlab-ci.yml
index 9fbad71bc..bae78b86d 100644
--- a/src/context/.gitlab-ci.yml
+++ b/src/context/.gitlab-ci.yml
@@ -10,8 +10,8 @@ build context:
     - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-#  after_script:
-#    - docker rmi $(docker images --quiet --filter=dangling=true)
+  after_script:
+    - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
     - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
diff --git a/src/device/.gitlab-ci.yml b/src/device/.gitlab-ci.yml
index 5868c6884..2c93618af 100644
--- a/src/device/.gitlab-ci.yml
+++ b/src/device/.gitlab-ci.yml
@@ -10,8 +10,8 @@ build device:
     - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-#  after_script:
-#    - docker rmi $(docker images --quiet --filter=dangling=true)
+  after_script:
+    - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
     - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
diff --git a/src/service/.gitlab-ci.yml b/src/service/.gitlab-ci.yml
index d47177171..3c943d543 100644
--- a/src/service/.gitlab-ci.yml
+++ b/src/service/.gitlab-ci.yml
@@ -10,8 +10,8 @@ build service:
     - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
-#  after_script:
-#    - docker rmi $(docker images --quiet --filter=dangling=true)
+  after_script:
+    - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
     - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
-- 
GitLab


From e790ac99ce9c86d0576cf0cc87b92f7116cc37aa Mon Sep 17 00:00:00 2001
From: Lluis Gifre <lluis.gifre@cttc.es>
Date: Thu, 13 Jan 2022 16:47:40 +0100
Subject: [PATCH 013/229] Solved bug in IETF L2VPN Service Handler

- service was created instead of updated.
---
 .../nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py         | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
index 639e8c63f..1f02e50a4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
@@ -125,7 +125,7 @@ def process_list_site_network_access(
     for site_network_access in request_data['ietf-l2vpn-svc:site-network-access']:
         try:
             service_request = process_site_network_access(context_client, site_network_access)
-            service_reply = service_client.CreateService(service_request)
+            service_reply = service_client.UpdateService(service_request)
             if service_reply != service_request.service_id: # pylint: disable=no-member
                 raise Exception('Service update failed. Wrong Service Id was returned')
         except Exception as e: # pylint: disable=broad-except
-- 
GitLab


From b156435b18d7845a850ed3651fbdcd2e9f2f27dc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Juan=20Pedre=C3=B1o=20Manresa?=
 <jpedrenomanresa@adva.com>
Date: Wed, 27 Jul 2022 13:29:40 +0000
Subject: [PATCH 014/229] Added new entrypoint for REST NBI

- Added subfolder rest_server/nbi_plugins/ietf_network_slice
- Modified and created classes to register new URLs in the REST server
- Skeleton for methods GET/POST/DELETE
- Refactoring: moved "tools" subfolder one level up
---
 src/compute/service/__main__.py               |   5 +-
 .../nbi_plugins/ietf_l2vpn/L2VPN_Service.py   |   6 +-
 .../nbi_plugins/ietf_l2vpn/L2VPN_Services.py  |   6 +-
 .../ietf_l2vpn/L2VPN_SiteNetworkAccesses.py   |   8 +-
 .../ietf_network_slice/NSS_Service.py         |  45 +++
 .../ietf_network_slice/NSS_Services.py        |  44 +++
 .../ietf_network_slice/__init__.py            |  32 +++
 .../ietf-network-slice-service.txt            | 261 ++++++++++++++++++
 .../{ietf_l2vpn => }/tools/Authentication.py  |   0
 .../{ietf_l2vpn => }/tools/ContextMethods.py  |   0
 .../{ietf_l2vpn => }/tools/HttpStatusCodes.py |   0
 .../{ietf_l2vpn => }/tools/Validator.py       |   0
 .../{ietf_l2vpn => }/tools/__init__.py        |   0
 13 files changed, 396 insertions(+), 11 deletions(-)
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ietf-network-slice-service.txt
 rename src/compute/service/rest_server/nbi_plugins/{ietf_l2vpn => }/tools/Authentication.py (100%)
 rename src/compute/service/rest_server/nbi_plugins/{ietf_l2vpn => }/tools/ContextMethods.py (100%)
 rename src/compute/service/rest_server/nbi_plugins/{ietf_l2vpn => }/tools/HttpStatusCodes.py (100%)
 rename src/compute/service/rest_server/nbi_plugins/{ietf_l2vpn => }/tools/Validator.py (100%)
 rename src/compute/service/rest_server/nbi_plugins/{ietf_l2vpn => }/tools/__init__.py (100%)

diff --git a/src/compute/service/__main__.py b/src/compute/service/__main__.py
index 345b2fdd6..cfd65e1de 100644
--- a/src/compute/service/__main__.py
+++ b/src/compute/service/__main__.py
@@ -21,6 +21,7 @@ from common.Settings import (
 from .ComputeService import ComputeService
 from .rest_server.RestServer import RestServer
 from .rest_server.nbi_plugins.ietf_l2vpn import register_ietf_l2vpn
+from .rest_server.nbi_plugins.ietf_network_slice import register_ietf_nss
 
 terminate = threading.Event()
 LOGGER = None
@@ -54,8 +55,10 @@ def main():
     grpc_service = ComputeService()
     grpc_service.start()
 
+    # Starting Rest Server
     rest_server = RestServer()
-    register_ietf_l2vpn(rest_server)
+    register_ietf_l2vpn(rest_server)  # Registering L2VPN entrypoint
+    register_ietf_nss(rest_server)  # Registering NSS entrypoint
     rest_server.start()
 
     # Wait for Ctrl+C or termination signal
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py
index c77d714a9..aad85240a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py
@@ -20,9 +20,9 @@ from common.Constants import DEFAULT_CONTEXT_UUID
 from common.proto.context_pb2 import ServiceId, ServiceStatusEnum, SliceStatusEnum
 from context.client.ContextClient import ContextClient
 from service.client.ServiceClient import ServiceClient
-from .tools.Authentication import HTTP_AUTH
-from .tools.ContextMethods import get_service, get_slice
-from .tools.HttpStatusCodes import HTTP_GATEWAYTIMEOUT, HTTP_NOCONTENT, HTTP_OK, HTTP_SERVERERROR
+from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH
+from compute.service.rest_server.nbi_plugins.tools.ContextMethods import get_service, get_slice
+from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_GATEWAYTIMEOUT, HTTP_NOCONTENT, HTTP_OK, HTTP_SERVERERROR
 
 LOGGER = logging.getLogger(__name__)
 
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py
index 7b959b289..7dbdfd37a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Services.py
@@ -23,9 +23,9 @@ from common.proto.context_pb2 import Service, ServiceStatusEnum, ServiceTypeEnum
 from service.client.ServiceClient import ServiceClient
 from slice.client.SliceClient import SliceClient
 from .schemas.vpn_service import SCHEMA_VPN_SERVICE
-from .tools.Authentication import HTTP_AUTH
-from .tools.HttpStatusCodes import HTTP_CREATED, HTTP_SERVERERROR
-from .tools.Validator import validate_message
+from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_CREATED, HTTP_SERVERERROR
+from compute.service.rest_server.nbi_plugins.tools.Validator import validate_message
+from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH
 
 LOGGER = logging.getLogger(__name__)
 
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
index 8be63895b..609828b1a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
@@ -26,10 +26,10 @@ from context.client.ContextClient import ContextClient
 from service.client.ServiceClient import ServiceClient
 from slice.client.SliceClient import SliceClient
 from .schemas.site_network_access import SCHEMA_SITE_NETWORK_ACCESS
-from .tools.Authentication import HTTP_AUTH
-from .tools.ContextMethods import get_service, get_slice
-from .tools.HttpStatusCodes import HTTP_NOCONTENT, HTTP_SERVERERROR
-from .tools.Validator import validate_message
+from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH
+from compute.service.rest_server.nbi_plugins.tools.ContextMethods import get_service, get_slice
+from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_NOCONTENT, HTTP_SERVERERROR
+from compute.service.rest_server.nbi_plugins.tools.Validator import validate_message
 from .Constants import BEARER_MAPPINGS, DEFAULT_ADDRESS_FAMILIES, DEFAULT_BGP_AS, DEFAULT_BGP_ROUTE_TARGET, DEFAULT_MTU
 
 LOGGER = logging.getLogger(__name__)
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py
new file mode 100644
index 000000000..9c7c11603
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py
@@ -0,0 +1,45 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+from flask.json import jsonify
+from flask_restful import Resource
+from flask import request
+from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH
+from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_OK
+
+LOGGER = logging.getLogger(__name__)
+
+class NSS_Service(Resource):
+    @HTTP_AUTH.login_required
+    def get(self, slice_id : str):
+        LOGGER.debug('GET Slice ID: {:s}'.format(str(slice_id)))
+        LOGGER.debug('GET Request: {:s}'.format(str(request)))
+        
+        # TODO Return information and status about requested slice
+
+        response = jsonify({"message": "Requested info for slice {:s}".format(slice_id)})
+        response.status_code = HTTP_OK
+        return response
+
+    @HTTP_AUTH.login_required
+    def delete(self, slice_id : str):
+        LOGGER.debug('DELETE Slice ID: {:s}'.format(str(slice_id)))
+        LOGGER.debug('DELETE Request: {:s}'.format(str(request)))
+        
+        # TODO Delete the requested slice
+
+        response = jsonify({"message": "Deletion request for slice {:s}".format(slice_id)})
+        response.status_code = HTTP_OK
+        return response
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
new file mode 100644
index 000000000..08f1dced4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
@@ -0,0 +1,44 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+from typing import Dict
+from flask.json import jsonify
+from flask_restful import Resource
+from flask import request
+from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH
+from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_BADREQUEST, HTTP_OK
+from werkzeug.exceptions import UnsupportedMediaType
+
+LOGGER = logging.getLogger(__name__)
+
+class NSS_Services(Resource):
+    @HTTP_AUTH.login_required
+    def get(self):    
+        response = jsonify({"message": "All went well!"})
+        response.status_code
+
+        # TODO Return list of current network-slice-services
+        return response
+
+    @HTTP_AUTH.login_required
+    def post(self):
+        if not request.is_json: raise UnsupportedMediaType('JSON payload is required')
+        request_data : Dict = request.json
+        LOGGER.debug('POST Request: {:s}'.format(str(request_data)))
+
+        # TODO Parse network-slice-service request and cascade to Slice and Policy componentes
+        response = jsonify({"message" : "POST message received correctly"})
+        response.status_code = HTTP_OK
+        return response
\ No newline at end of file
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py
new file mode 100644
index 000000000..aa45206cd
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py
@@ -0,0 +1,32 @@
+# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# IETF draft-ietf-teas-ietf-network-slice-nbi-yang-02 - IETF Network Slice Service YANG Model
+# Ref: https://datatracker.ietf.org/doc/draft-ietf-teas-ietf-network-slice-nbi-yang/
+
+from flask_restful import Resource
+from compute.service.rest_server.RestServer import RestServer
+from .NSS_Services import NSS_Services
+from .NSS_Service import NSS_Service
+
+URL_PREFIX = '/ietf-network-slice-service:ietf-nss'
+
+def _add_resource(rest_server : RestServer, resource : Resource, *urls, **kwargs):
+    urls = [(URL_PREFIX + url) for url in urls]
+    rest_server.add_resource(resource, *urls, **kwargs)
+
+def register_ietf_nss(rest_server : RestServer):
+    _add_resource(rest_server, NSS_Services, '/network-slice-services')
+    _add_resource(rest_server, NSS_Service, '/network-slice-services/slice-service=<string:slice_id>')
+    
\ No newline at end of file
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ietf-network-slice-service.txt b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ietf-network-slice-service.txt
new file mode 100644
index 000000000..b81498dd8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ietf-network-slice-service.txt
@@ -0,0 +1,261 @@
+# IETF draft-ietf-teas-ietf-network-slice-nbi-yang-02 - IETF Network Slice Service YANG Model
+# Ref: https://datatracker.ietf.org/doc/draft-ietf-teas-ietf-network-slice-nbi-yang/
+
+module: ietf-network-slice-service
+  +--rw network-slice-services
+     +--rw slo-sle-templates
+     |  +--rw slo-sle-template* [id]
+     |     +--rw id                      string
+     |     +--rw template-description?   string
+     +--rw slice-service* [service-id]
+        +--rw service-id                      string
+        +--rw service-description?            string
+        +--rw service-tags
+        |  +--rw tag-type* [tag-type]
+        |  |  +--rw tag-type    identityref
+        |  |  +--rw value*      string
+        |  +--rw tag-opaque* [tag-name]
+        |     +--rw tag-name    string
+        |     +--rw value*      string
+        +--rw (slo-sle-policy)?
+        |  +--:(standard)
+        |  |  +--rw slo-sle-template?         leafref
+        |  +--:(custom)
+        |     +--rw service-slo-sle-policy
+        |        +--rw policy-description?     string
+        |        +--rw metric-bounds
+        |        |  +--rw metric-bound* [metric-type]
+        |        |     +--rw metric-type          identityref
+        |        |     +--rw metric-unit          string
+        |        |     +--rw value-description?   string
+        |        |     +--rw bound?               uint64
+        |        +--rw security*               identityref
+        |        +--rw isolation?              identityref
+        |        +--rw max-occupancy-level?    uint8
+        |        +--rw mtu?                    uint16
+        |        +--rw steering-constraints
+        |           +--rw path-constraints
+        |           +--rw service-function
+        +--rw status
+        |  +--rw admin-status
+        |  |  +--rw status?         identityref
+        |  |  +--rw last-updated?   yang:date-and-time
+        |  +--ro oper-status
+        |     +--ro status?         identityref
+        |     +--ro last-updated?   yang:date-and-time
+        +--rw sdps
+        |  +--rw sdp* [sdp-id]
+        |     +--rw sdp-id                    string
+        |     +--rw sdp-description?          string
+        |     +--rw location
+        |     |  +--rw altitude?    int64
+        |     |  +--rw latitude?    decimal64
+        |     |  +--rw longitude?   decimal64
+        |     +--rw node-id?                  string
+        |     +--rw sdp-ip?                   inet:ip-address
+        |     +--rw service-match-criteria
+        |     |  +--rw match-criterion* [index]
+        |     |     +--rw index                               uint32
+        |     |     +--rw match-type
+        |     |     |       identityref
+        |     |     +--rw value*                              string
+        |     |     +--rw target-connection-group-id          leafref
+        |     |     +--rw connection-group-sdp-role?
+        |     |     |       identityref
+        |     |     +--rw target-connectivity-construct-id?   leafref
+        |     +--rw sdp-peering
+        |     |  +--rw protocol* [protocol-type]
+        |     |  |  +--rw protocol-type    identityref
+        |     |  |  +--rw attribute* [attribute-type]
+        |     |  |     +--rw attribute-type    identityref
+        |     |  |     +--rw value*            string
+        |     |  +--rw opaque* [attribute-name]
+        |     |     +--rw attribute-name    string
+        |     |     +--rw value*            string
+        |     +--rw attachment-circuits
+        |     |  +--rw attachment-circuit* [ac-id]
+        |     |     +--rw ac-id                     string
+        |     |     +--rw ac-description?           string
+        |     |     +--rw ac-node-id?               string
+        |     |     +--rw ac-tp-id?                 string
+        |     |     +--rw ac-ip-address?            inet:ip-address
+        |     |     +--rw ac-ip-prefix-length?      uint8
+        |     |     +--rw ac-qos-policy-name?       string
+        |     |     +--rw mtu?                      uint16
+        |     |     +--rw ac-tags
+        |     |     |  +--rw ac-tags* [ac-tag-type]
+        |     |     |  |  +--rw ac-tag-type    identityref
+        |     |     |  |  +--rw value*         string
+        |     |     |  +--rw ac-tag-opaque* [tag-name]
+        |     |     |     +--rw tag-name    string
+        |     |     |     +--rw value*      string
+        |     |     +--rw service-match-criteria
+        |     |     |  +--rw match-criterion* [index]
+        |     |     |     +--rw index
+        |     |     |     |       uint32
+        |     |     |     +--rw match-type
+        |     |     |     |       identityref
+        |     |     |     +--rw value*
+        |     |     |     |       string
+        |     |     |     +--rw target-connection-group-id          leafref
+        |     |     |     +--rw connection-group-sdp-role?
+        |     |     |     |       identityref
+        |     |     |     +--rw target-connectivity-construct-id?   leafref
+        |     |     +--rw sdp-peering
+        |     |     |  +--rw protocol* [protocol-type]
+        |     |     |  |  +--rw protocol-type    identityref
+        |     |     |  |  +--rw attribute* [attribute-type]
+        |     |     |  |     +--rw attribute-type    identityref
+        |     |     |  |     +--rw value*            string
+        |     |     |  +--rw opaque* [attribute-name]
+        |     |     |     +--rw attribute-name    string
+        |     |     |     +--rw value*            string
+        |     |     +--rw incoming-rate-limits
+        |     |     |  +--rw cir?   uint64
+        |     |     |  +--rw cbs?   uint64
+        |     |     |  +--rw eir?   uint64
+        |     |     |  +--rw ebs?   uint64
+        |     |     |  +--rw pir?   uint64
+        |     |     |  +--rw pbs?   uint64
+        |     |     +--rw outgoing-rate-limits
+        |     |        +--rw cir?   uint64
+        |     |        +--rw cbs?   uint64
+        |     |        +--rw eir?   uint64
+        |     |        +--rw ebs?   uint64
+        |     |        +--rw pir?   uint64
+        |     |        +--rw pbs?   uint64
+        |     +--rw incoming-rate-limits
+        |     |  +--rw cir?   uint64
+        |     |  +--rw cbs?   uint64
+        |     |  +--rw eir?   uint64
+        |     |  +--rw ebs?   uint64
+        |     |  +--rw pir?   uint64
+        |     |  +--rw pbs?   uint64
+        |     +--rw outgoing-rate-limits
+        |     |  +--rw cir?   uint64
+        |     |  +--rw cbs?   uint64
+        |     |  +--rw eir?   uint64
+        |     |  +--rw ebs?   uint64
+        |     |  +--rw pir?   uint64
+        |     |  +--rw pbs?   uint64
+        |     +--rw status
+        |     |  +--rw admin-status
+        |     |  |  +--rw status?         identityref
+        |     |  |  +--rw last-updated?   yang:date-and-time
+        |     |  +--ro oper-status
+        |     |     +--ro status?         identityref
+        |     |     +--ro last-updated?   yang:date-and-time
+        |     +--ro sdp-monitoring
+        |        +--ro incoming-utilized-bandwidth?
+        |        |       te-types:te-bandwidth
+        |        +--ro incoming-bw-utilization        decimal64
+        |        +--ro outgoing-utilized-bandwidth?
+        |        |       te-types:te-bandwidth
+        |        +--ro outgoing-bw-utilization        decimal64
+        +--rw connection-groups
+           +--rw connection-group* [connection-group-id]
+              +--rw connection-group-id             string
+              +--rw connectivity-type?              identityref
+              +--rw (slo-sle-policy)?
+              |  +--:(standard)
+              |  |  +--rw slo-sle-template?         leafref
+              |  +--:(custom)
+              |     +--rw service-slo-sle-policy
+              |        +--rw policy-description?     string
+              |        +--rw metric-bounds
+              |        |  +--rw metric-bound* [metric-type]
+              |        |     +--rw metric-type          identityref
+              |        |     +--rw metric-unit          string
+              |        |     +--rw value-description?   string
+              |        |     +--rw bound?               uint64
+              |        +--rw security*               identityref
+              |        +--rw isolation?              identityref
+              |        +--rw max-occupancy-level?    uint8
+              |        +--rw mtu?                    uint16
+              |        +--rw steering-constraints
+              |           +--rw path-constraints
+              |           +--rw service-function
+              +--rw connectivity-construct* [cc-id]
+              |  +--rw cc-id                                uint32
+              |  +--rw (connectivity-construct-type)?
+              |  |  +--:(p2p)
+              |  |  |  +--rw p2p-sender-sdp?
+              |  |  |  |       -> ../../../../sdps/sdp/sdp-id
+              |  |  |  +--rw p2p-receiver-sdp?
+              |  |  |          -> ../../../../sdps/sdp/sdp-id
+              |  |  +--:(p2mp)
+              |  |  |  +--rw p2mp-sender-sdp?
+              |  |  |  |       -> ../../../../sdps/sdp/sdp-id
+              |  |  |  +--rw p2mp-receiver-sdp*
+              |  |  |          -> ../../../../sdps/sdp/sdp-id
+              |  |  +--:(a2a)
+              |  |     +--rw a2a-sdp* [sdp-id]
+              |  |        +--rw sdp-id
+              |  |        |       -> ../../../../../sdps/sdp/sdp-id
+              |  |        +--rw (slo-sle-policy)?
+              |  |           +--:(standard)
+              |  |           |  +--rw slo-sle-template?         leafref
+              |  |           +--:(custom)
+              |  |              +--rw service-slo-sle-policy
+              |  |                 +--rw policy-description?
+              |  |                 |       string
+              |  |                 +--rw metric-bounds
+              |  |                 |  +--rw metric-bound*
+              |  |                 |          [metric-type]
+              |  |                 |     +--rw metric-type
+              |  |                 |     |       identityref
+              |  |                 |     +--rw metric-unit
+              |  |                 |     |       string
+              |  |                 |     +--rw value-description?
+              |  |                 |     |       string
+              |  |                 |     +--rw bound?
+              |  |                 |             uint64
+              |  |                 +--rw security*
+              |  |                 |       identityref
+              |  |                 +--rw isolation?
+              |  |                 |       identityref
+              |  |                 +--rw max-occupancy-level?
+              |  |                 |       uint8
+              |  |                 +--rw mtu?
+              |  |                 |       uint16
+              |  |                 +--rw steering-constraints
+              |  |                    +--rw path-constraints
+              |  |                    +--rw service-function
+              |  +--rw (slo-sle-policy)?
+              |  |  +--:(standard)
+              |  |  |  +--rw slo-sle-template?              leafref
+              |  |  +--:(custom)
+              |  |     +--rw service-slo-sle-policy
+              |  |        +--rw policy-description?     string
+              |  |        +--rw metric-bounds
+              |  |        |  +--rw metric-bound* [metric-type]
+              |  |        |     +--rw metric-type
+              |  |        |     |       identityref
+              |  |        |     +--rw metric-unit          string
+              |  |        |     +--rw value-description?   string
+              |  |        |     +--rw bound?               uint64
+              |  |        +--rw security*               identityref
+              |  |        +--rw isolation?              identityref
+              |  |        +--rw max-occupancy-level?    uint8
+              |  |        +--rw mtu?                    uint16
+              |  |        +--rw steering-constraints
+              |  |           +--rw path-constraints
+              |  |           +--rw service-function
+              |  +--ro connectivity-construct-monitoring
+              |     +--ro one-way-min-delay?         uint32
+              |     +--ro one-way-max-delay?         uint32
+              |     +--ro one-way-delay-variation?   uint32
+              |     +--ro one-way-packet-loss?       decimal64
+              |     +--ro two-way-min-delay?         uint32
+              |     +--ro two-way-max-delay?         uint32
+              |     +--ro two-way-delay-variation?   uint32
+              |     +--ro two-way-packet-loss?       decimal64
+              +--ro connection-group-monitoring
+                 +--ro one-way-min-delay?         uint32
+                 +--ro one-way-max-delay?         uint32
+                 +--ro one-way-delay-variation?   uint32
+                 +--ro one-way-packet-loss?       decimal64
+                 +--ro two-way-min-delay?         uint32
+                 +--ro two-way-max-delay?         uint32
+                 +--ro two-way-delay-variation?   uint32
+                 +--ro two-way-packet-loss?       decimal64
\ No newline at end of file
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py b/src/compute/service/rest_server/nbi_plugins/tools/Authentication.py
similarity index 100%
rename from src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Authentication.py
rename to src/compute/service/rest_server/nbi_plugins/tools/Authentication.py
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/ContextMethods.py b/src/compute/service/rest_server/nbi_plugins/tools/ContextMethods.py
similarity index 100%
rename from src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/ContextMethods.py
rename to src/compute/service/rest_server/nbi_plugins/tools/ContextMethods.py
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py b/src/compute/service/rest_server/nbi_plugins/tools/HttpStatusCodes.py
similarity index 100%
rename from src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/HttpStatusCodes.py
rename to src/compute/service/rest_server/nbi_plugins/tools/HttpStatusCodes.py
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py b/src/compute/service/rest_server/nbi_plugins/tools/Validator.py
similarity index 100%
rename from src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/Validator.py
rename to src/compute/service/rest_server/nbi_plugins/tools/Validator.py
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/__init__.py b/src/compute/service/rest_server/nbi_plugins/tools/__init__.py
similarity index 100%
rename from src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/tools/__init__.py
rename to src/compute/service/rest_server/nbi_plugins/tools/__init__.py
-- 
GitLab


From 1587331770e329c611fa236791291d6a02982c3b Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Tue, 20 Dec 2022 09:18:07 +0100
Subject: [PATCH 015/229] Changes in local

---
 manifests/pathcompservice.yaml                 | 2 +-
 manifests/serviceservice.yaml                  | 2 +-
 scripts/run_tests_locally-device-openconfig.sh | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/manifests/pathcompservice.yaml b/manifests/pathcompservice.yaml
index 51c83a0f3..4492d1cb1 100644
--- a/manifests/pathcompservice.yaml
+++ b/manifests/pathcompservice.yaml
@@ -20,7 +20,7 @@ spec:
   selector:
     matchLabels:
       app: pathcompservice
-  replicas: 5
+  replicas: 1
   template:
     metadata:
       labels:
diff --git a/manifests/serviceservice.yaml b/manifests/serviceservice.yaml
index 089be20f9..d9ecc998e 100644
--- a/manifests/serviceservice.yaml
+++ b/manifests/serviceservice.yaml
@@ -20,7 +20,7 @@ spec:
   selector:
     matchLabels:
       app: serviceservice
-  replicas: 5
+  replicas: 1
   template:
     metadata:
       labels:
diff --git a/scripts/run_tests_locally-device-openconfig.sh b/scripts/run_tests_locally-device-openconfig.sh
index f87346fed..0d493db9c 100755
--- a/scripts/run_tests_locally-device-openconfig.sh
+++ b/scripts/run_tests_locally-device-openconfig.sh
@@ -14,7 +14,7 @@
 # limitations under the License.
 
 
-PROJECTDIR=`pwd`
+PROJECTDIR=/home/ubuntu/controller/
 
 cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
-- 
GitLab


From 9a9057960a1eb6fe53bab2860aee65679f1bb89b Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Wed, 21 Dec 2022 14:28:57 +0100
Subject: [PATCH 016/229] L3NM D3.2 evaluation changes

---
 .../l3nm_openconfig/ConfigRules.py            | 242 +++++++-----------
 src/tests/tools/load_gen/RequestGenerator.py  |  42 ++-
 src/tests/tools/load_gen/__main__.py          |   8 +-
 3 files changed, 134 insertions(+), 158 deletions(-)

diff --git a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
index 3a5aff588..49d49fa79 100644
--- a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
@@ -29,109 +29,109 @@ def setup_config_rules(
     network_interface_desc    = '{:s}-NetIf'.format(service_uuid)
     network_subinterface_desc = '{:s}-NetSubIf'.format(service_uuid)
 
-    mtu                 = json_settings.get('mtu',                 1450 )    # 1512
+    mtu                 = 3000   # 1512
     #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
-    bgp_as              = json_settings.get('bgp_as',              0    )    # 65000
-    bgp_route_target    = json_settings.get('bgp_route_target',    '0:0')    # 65000:333
+    bgp_as              = json_settings.get('bgp_as',              65000    )    # 65000
+    bgp_route_target    = json_settings.get('bgp_route_target',    '65000:123')    # 65000:333
 
-    #router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
+    router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
     route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
-    sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
     vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
+    policy_import       = json_endpoint_settings.get('policy_1',      '2'              )  # 2
+    policy_export       = json_endpoint_settings.get('policy_2',      '7'              )  # 30
+
     if_subif_name       = '{:s}.{:d}'.format(endpoint_uuid, vlan_id)
 
     json_config_rules = [
         json_config_rule_set(
             '/network_instance[{:s}]'.format(network_instance_name), {
-                'name': network_instance_name, 'description': network_interface_desc, 'type': 'L3VRF',
+                'name': network_instance_name, 
+                'description': network_interface_desc, 
+                'type': 'L3VRF',
                 'route_distinguisher': route_distinguisher,
-                #'router_id': router_id, 'address_families': address_families,
-        }),
-        json_config_rule_set(
-            '/interface[{:s}]'.format(endpoint_uuid), {
-                'name': endpoint_uuid, 'description': network_interface_desc, 'mtu': mtu,
-        }),
-        json_config_rule_set(
-            '/interface[{:s}]/subinterface[{:d}]'.format(endpoint_uuid, sub_interface_index), {
-                'name': endpoint_uuid, 'index': sub_interface_index,
-                'description': network_subinterface_desc, 'vlan_id': vlan_id,
-                'address_ip': address_ip, 'address_prefix': address_prefix,
-        }),
-        json_config_rule_set(
-            '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_subif_name), {
-                'name': network_instance_name, 'id': if_subif_name, 'interface': endpoint_uuid,
-                'subinterface': sub_interface_index,
         }),
         json_config_rule_set(
             '/network_instance[{:s}]/protocols[BGP]'.format(network_instance_name), {
-                'name': network_instance_name, 'identifier': 'BGP', 'protocol_name': 'BGP', 'as': bgp_as,
-        }),
-        json_config_rule_set(
-            '/network_instance[{:s}]/table_connections[STATIC][BGP][IPV4]'.format(network_instance_name), {
-                'name': network_instance_name, 'src_protocol': 'STATIC', 'dst_protocol': 'BGP',
-                'address_family': 'IPV4', #'default_import_policy': 'REJECT_ROUTE',
+                'name': network_instance_name, 
+                'protocol_name': 'BGP', 
+                'identifier': 'BGP', 
+                'as': bgp_as,
+                'router_id': router_id, 
+        }),
+         json_config_rule_set(
+            '/network_instance[{:s}]/protocols[DIRECTLY_CONNECTED]'.format(network_instance_name), {
+                'name': network_instance_name, 
+                'identifier': 'DIRECTLY_CONNECTED', 
+                'protocol_name': 'DIRECTLY_CONNECTED',
+        }),
+        json_config_rule_set(
+            '/interface[{:s}]/subinterface[0]'.format(if_subif_name), {
+                'name': if_subif_name, 
+                'type':'l3ipvlan',
+                'mtu': mtu,
+                'index': 0,
+                'description': network_subinterface_desc, 
+                'vlan_id': vlan_id,
+                'address_ip': address_ip, 
+                'address_prefix': address_prefix,
         }),
         json_config_rule_set(
-            '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format(
-                network_instance_name), {
-                'name': network_instance_name, 'src_protocol': 'DIRECTLY_CONNECTED', 'dst_protocol': 'BGP',
-                'address_family': 'IPV4', #'default_import_policy': 'REJECT_ROUTE',
-        }),
-        json_config_rule_set(
-            '/routing_policy/bgp_defined_set[{:s}_rt_import]'.format(network_instance_name), {
-                'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name),
-        }),
+            '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_subif_name), {
+                'name': network_instance_name, 
+                'id': if_subif_name, 
+                'interface': if_subif_name,
+                'subinterface': 0,
+        }), 
         json_config_rule_set(
-            '/routing_policy/bgp_defined_set[{:s}_rt_import][route-target:{:s}]'.format(
+            '/routing_policy/bgp_defined_set[{:s}_rt_import][{:s}]'.format(
                 network_instance_name, bgp_route_target), {
                 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name),
                 'ext_community_member'  : 'route-target:{:s}'.format(bgp_route_target),
-        }),
-        json_config_rule_set(
-            '/routing_policy/policy_definition[{:s}_import]'.format(network_instance_name), {
-                'policy_name': '{:s}_import'.format(network_instance_name),
-        }),
+        }), 
         json_config_rule_set(
-            '/routing_policy/policy_definition[{:s}_import]/statement[{:s}]'.format(
-                network_instance_name, '3'), {
-                'policy_name': '{:s}_import'.format(network_instance_name), 'statement_name': '3',
+            '/routing_policy/policy_definition[{:s}_import]/statement[3]'.format(
+                network_instance_name), {
+                'policy_name': policy_import, 
+                'statement_name': '3',
                 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name),
-                'match_set_options': 'ANY', 'policy_result': 'ACCEPT_ROUTE',
-        }),
+                'policy_result': 'ACCEPT_ROUTE',
+        }), 
         json_config_rule_set(
-            # pylint: disable=duplicate-string-formatting-argument
             '/network_instance[{:s}]/inter_instance_policies[{:s}_import]'.format(
-                network_instance_name, network_instance_name), {
-                'name': network_instance_name, 'import_policy': '{:s}_import'.format(network_instance_name),
-        }),
-        json_config_rule_set(
-            '/routing_policy/bgp_defined_set[{:s}_rt_export]'.format(network_instance_name), {
-                'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name),
-        }),
+                network_instance_name, policy_import), {
+                'name': network_instance_name, 
+                'import_policy': policy_import,
+        }), 
         json_config_rule_set(
-            '/routing_policy/bgp_defined_set[{:s}_rt_export][route-target:{:s}]'.format(
+            '/routing_policy/bgp_defined_set[{:s}_rt_export][{:s}]'.format(
                 network_instance_name, bgp_route_target), {
                 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name),
                 'ext_community_member'  : 'route-target:{:s}'.format(bgp_route_target),
-        }),
-        json_config_rule_set(
-            '/routing_policy/policy_definition[{:s}_export]'.format(network_instance_name), {
-                'policy_name': '{:s}_export'.format(network_instance_name),
-        }),
+        }), 
         json_config_rule_set(
-            '/routing_policy/policy_definition[{:s}_export]/statement[{:s}]'.format(
-                network_instance_name, '3'), {
-                'policy_name': '{:s}_export'.format(network_instance_name), 'statement_name': '3',
+            '/routing_policy/policy_definition[{:s}_export]/statement[3]'.format(
+                network_instance_name), {
+                'policy_name': policy_export, 
+                'statement_name': '3',
                 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name),
-                'match_set_options': 'ANY', 'policy_result': 'ACCEPT_ROUTE',
-        }),
+                'policy_result': 'ACCEPT_ROUTE',
+        }), 
         json_config_rule_set(
-            # pylint: disable=duplicate-string-formatting-argument
             '/network_instance[{:s}]/inter_instance_policies[{:s}_export]'.format(
-                network_instance_name, network_instance_name), {
-                'name': network_instance_name, 'export_policy': '{:s}_export'.format(network_instance_name),
+                network_instance_name, policy_export), {
+                'name': network_instance_name, 
+                'export_policy': policy_export,
+        }),  
+        json_config_rule_set(
+            '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format(
+                network_instance_name), {
+                'name': network_instance_name, 
+                'src_protocol': 'DIRECTLY_CONNECTED', 
+                'dst_protocol': 'BGP',
+                'address_family': 'IPV4',
+                'default_import_policy': 'ACCEPT_ROUTE',
         }),
     ]
 
@@ -145,101 +145,57 @@ def teardown_config_rules(
     json_settings          : Dict = {} if service_settings  is None else service_settings.value
     json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
 
-    #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
+    service_short_uuid        = service_uuid.split('-')[-1]
+    network_instance_name     = '{:s}-NetInst'.format(service_short_uuid)
+    #network_interface_desc    = '{:s}-NetIf'.format(service_uuid)
+    #network_subinterface_desc = '{:s}-NetSubIf'.format(service_uuid)
+
+    #mtu                 = json_settings.get('mtu',                 3000 )    # 1512
     #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
-    #bgp_as              = json_settings.get('bgp_as',              0    )    # 65000
-    bgp_route_target    = json_settings.get('bgp_route_target',    '0:0')    # 65000:333
+    #bgp_as              = json_settings.get('bgp_as',              65000    )    # 65000
+    bgp_route_target    = json_settings.get('bgp_route_target',    '65000:123')    # 65000:333
 
     #router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
     #route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
-    sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
     vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     #address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     #address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
+    policy_import       = json_endpoint_settings.get('policy_1',      2              )  # 2
+    policy_export       = json_endpoint_settings.get('policy_2',      7              )  # 30
+
+    if_subif_name       = '{:s}.{:d}'.format(endpoint_uuid, vlan_id)
 
-    if_subif_name             = '{:s}.{:d}'.format(endpoint_uuid, vlan_id)
-    service_short_uuid        = service_uuid.split('-')[-1]
-    network_instance_name     = '{:s}-NetInst'.format(service_short_uuid)
-    #network_interface_desc    = '{:s}-NetIf'.format(service_uuid)
-    #network_subinterface_desc = '{:s}-NetSubIf'.format(service_uuid)
 
     json_config_rules = [
-        json_config_rule_delete(
-            '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_subif_name), {
-                'name': network_instance_name, 'id': if_subif_name,
-        }),
-        json_config_rule_delete(
-            '/interface[{:s}]/subinterface[{:d}]'.format(endpoint_uuid, sub_interface_index), {
-                'name': endpoint_uuid, 'index': sub_interface_index,
-        }),
-        json_config_rule_delete(
-            '/interface[{:s}]'.format(endpoint_uuid), {
-                'name': endpoint_uuid,
-        }),
         json_config_rule_delete(
             '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format(
                 network_instance_name), {
-                'name': network_instance_name, 'src_protocol': 'DIRECTLY_CONNECTED', 'dst_protocol': 'BGP',
+                'name': network_instance_name, 
+                'src_protocol': 'DIRECTLY_CONNECTED', 
+                'dst_protocol': 'BGP',
                 'address_family': 'IPV4',
         }),
-        json_config_rule_delete(
-            '/network_instance[{:s}]/table_connections[STATIC][BGP][IPV4]'.format(network_instance_name), {
-                'name': network_instance_name, 'src_protocol': 'STATIC', 'dst_protocol': 'BGP',
-                'address_family': 'IPV4',
-        }),
-        json_config_rule_delete(
-            '/network_instance[{:s}]/protocols[BGP]'.format(network_instance_name), {
-                'name': network_instance_name, 'identifier': 'BGP', 'protocol_name': 'BGP',
-        }),
-        json_config_rule_delete(
-            # pylint: disable=duplicate-string-formatting-argument
-            '/network_instance[{:s}]/inter_instance_policies[{:s}_import]'.format(
-                network_instance_name, network_instance_name), {
-            'name': network_instance_name,
-        }),
-        json_config_rule_delete(
-            '/routing_policy/policy_definition[{:s}_import]/statement[{:s}]'.format(
-                network_instance_name, '3'), {
-                'policy_name': '{:s}_import'.format(network_instance_name), 'statement_name': '3',
-        }),
-        json_config_rule_delete(
-            '/routing_policy/policy_definition[{:s}_import]'.format(network_instance_name), {
-                'policy_name': '{:s}_import'.format(network_instance_name),
+        json_config_rule_delete('/routing_policy/policy_definition[{:s}_import]/statement[3]'.format(
+            network_instance_name),{
+                'policy_name' : policy_import,
         }),
-        json_config_rule_delete(
-            '/routing_policy/bgp_defined_set[{:s}_rt_import][route-target:{:s}]'.format(
-                network_instance_name, bgp_route_target), {
+
+        json_config_rule_delete('/routing_policy/bgp_defined_set[{:s}_rt_import][{:s}]'.format(
+            network_instance_name,bgp_route_target),{
                 'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name),
-                'ext_community_member'  : 'route-target:{:s}'.format(bgp_route_target),
         }),
-        json_config_rule_delete(
-            '/routing_policy/bgp_defined_set[{:s}_rt_import]'.format(network_instance_name), {
-                'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name),
+        json_config_rule_delete('/routing_policy/policy_definition[{:s}_export]/statement[3]'.format(
+            network_instance_name),{
+                'policy_name' : policy_export,
         }),
-        json_config_rule_delete(
-            # pylint: disable=duplicate-string-formatting-argument
-            '/network_instance[{:s}]/inter_instance_policies[{:s}_export]'.format(
-                network_instance_name, network_instance_name), {
-                'name': network_instance_name,
-        }),
-        json_config_rule_delete(
-            '/routing_policy/policy_definition[{:s}_export]/statement[{:s}]'.format(
-                network_instance_name, '3'), {
-                'policy_name': '{:s}_export'.format(network_instance_name), 'statement_name': '3',
-        }),
-        json_config_rule_delete(
-            '/routing_policy/policy_definition[{:s}_export]'.format(network_instance_name), {
-                'policy_name': '{:s}_export'.format(network_instance_name),
-        }),
-        json_config_rule_delete(
-            '/routing_policy/bgp_defined_set[{:s}_rt_export][route-target:{:s}]'.format(
-                network_instance_name, bgp_route_target), {
+
+        json_config_rule_delete('/routing_policy/bgp_defined_set[{:s}_rt_import][{:s}]'.format(
+            network_instance_name,bgp_route_target),{
                 'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name),
-                'ext_community_member'  : 'route-target:{:s}'.format(bgp_route_target),
         }),
         json_config_rule_delete(
-            '/routing_policy/bgp_defined_set[{:s}_rt_export]'.format(network_instance_name), {
-                'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name),
+            '/interface[{:s}]'.format(if_subif_name), {
+                'name': if_subif_name,
         }),
         json_config_rule_delete(
             '/network_instance[{:s}]'.format(network_instance_name), {
diff --git a/src/tests/tools/load_gen/RequestGenerator.py b/src/tests/tools/load_gen/RequestGenerator.py
index b0ec9bea6..7f146fe99 100644
--- a/src/tests/tools/load_gen/RequestGenerator.py
+++ b/src/tests/tools/load_gen/RequestGenerator.py
@@ -31,6 +31,11 @@ from .Parameters import Parameters
 
 LOGGER = logging.getLogger(__name__)
 
+ROUTER_ID = {
+    'R149': '5.5.5.5',
+    'R155': '5.5.5.1',
+}
+
 class RequestGenerator:
     def __init__(self, parameters : Parameters) -> None:
         self._parameters = parameters
@@ -205,8 +210,10 @@ class RequestGenerator:
             ]
             vlan_id = num_request % 1000
             circuit_id = '{:03d}'.format(vlan_id)
-            src_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
-            dst_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
+            src_router_id = ROUTER_ID.get(src_device_uuid)
+            if src_router_id is None: src_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
+            dst_router_id = ROUTER_ID.get(dst_device_uuid)
+            if dst_router_id is None: dst_router_id = '10.0.0.{:d}'.format(int(dst_device_uuid.replace('R', '')))
             config_rules = [
                 json_config_rule_set('/settings', {
                     'mtu': 1512
@@ -234,35 +241,48 @@ class RequestGenerator:
                 json_constraint_custom('bandwidth[gbps]', '10.0'),
                 json_constraint_custom('latency[ms]',     '20.0'),
             ]
-            vlan_id = num_request % 1000
-            bgp_as = 60000 + (num_request % 10000)
+            
+            bgp_as = 65000 + (num_request % 10000)
+
+            
+            vlan_id = num_request % 100 +100
+            x= num_request % 255
+            y= num_request % 25 *  num_request % 10
             bgp_route_target = '{:5d}:{:03d}'.format(bgp_as, 333)
             route_distinguisher = '{:5d}:{:03d}'.format(bgp_as, vlan_id)
-            src_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
-            dst_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
-            src_address_ip = '.'.join([src_device_uuid.replace('R', ''), '0'] + src_endpoint_uuid.split('/'))
-            dst_address_ip = '.'.join([dst_device_uuid.replace('R', ''), '0'] + dst_endpoint_uuid.split('/'))
+            src_router_id = ROUTER_ID.get(src_device_uuid)
+            if src_router_id is None: src_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
+            dst_router_id = ROUTER_ID.get(dst_device_uuid)
+            if dst_router_id is None: dst_router_id = '10.0.0.{:d}'.format(int(dst_device_uuid.replace('R', '')))
+            src_address_ip = '10.{:d}.{:d}.{:d}'.format(x,y,int(src_device_uuid.replace('R', '')))
+            dst_address_ip = '10.{:d}.{:d}.{:d}'.format(y,x,int(dst_device_uuid.replace('R', '')))
+            policy_R1 = '7'
+            policy_R2 = '2'
+            
             config_rules = [
                 json_config_rule_set('/settings', {
-                    'mtu'             : 1512,
                     'bgp_as'          : bgp_as,
                     'bgp_route_target': bgp_route_target,
                 }),
                 json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_uuid, src_endpoint_uuid), {
                     'router_id'          : src_router_id,
                     'route_distinguisher': route_distinguisher,
-                    'sub_interface_index': vlan_id,
                     'vlan_id'            : vlan_id,
                     'address_ip'         : src_address_ip,
                     'address_prefix'     : 16,
+                    'policy_1'           : policy_R1,
+                    'policy_2'           : policy_R2,
+
                 }),
                 json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                     'router_id'          : dst_router_id,
                     'route_distinguisher': route_distinguisher,
-                    'sub_interface_index': vlan_id,
                     'vlan_id'            : vlan_id,
                     'address_ip'         : dst_address_ip,
                     'address_prefix'     : 16,
+                    'policy_1'           : policy_R2,
+                    'policy_2'           : policy_R1,
+
                 }),
             ]
             return json_service_l3nm_planned(
diff --git a/src/tests/tools/load_gen/__main__.py b/src/tests/tools/load_gen/__main__.py
index f622f4d14..88b4b16b1 100644
--- a/src/tests/tools/load_gen/__main__.py
+++ b/src/tests/tools/load_gen/__main__.py
@@ -24,13 +24,13 @@ LOGGER = logging.getLogger(__name__)
 def main():
     LOGGER.info('Starting...')
     parameters = Parameters(
-        num_requests = 100,
+        num_requests = 1,
         request_types = [
-            RequestType.SERVICE_L2NM,
+            #RequestType.SERVICE_L2NM,
             RequestType.SERVICE_L3NM,
             #RequestType.SERVICE_TAPI,
-            RequestType.SLICE_L2NM,
-            RequestType.SLICE_L3NM,
+            #RequestType.SLICE_L2NM,
+            #RequestType.SLICE_L3NM,
         ],
         offered_load  = 50,
         holding_time  = 10,
-- 
GitLab


From 993f9903a1e6883bc930afae01c68589e73398ad Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 21 Dec 2022 14:00:44 +0000
Subject: [PATCH 017/229] Service Handler L3NM OpenConfig

- skipped endpoint configuration when no config rules are speicfied for an endpoint
---
 .../l3nm_openconfig/ConfigRules.py            |  7 ++++--
 .../L3NMOpenConfigServiceHandler.py           | 24 +++++++++----------
 2 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
index 49d49fa79..2a8f7794b 100644
--- a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
@@ -21,8 +21,11 @@ def setup_config_rules(
     service_settings : TreeNode, endpoint_settings : TreeNode
 ) -> List[Dict]:
 
-    json_settings          : Dict = {} if service_settings  is None else service_settings.value
-    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
+    if service_settings  is None: return []
+    if endpoint_settings is None: return []
+
+    json_settings          : Dict = service_settings.value
+    json_endpoint_settings : Dict = endpoint_settings.value
 
     service_short_uuid        = service_uuid.split('-')[-1]
     network_instance_name     = '{:s}-NetInst'.format(service_short_uuid)
diff --git a/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py b/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py
index 0f5cb6c55..3f8fc566c 100644
--- a/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py
+++ b/src/service/service/service_handlers/l3nm_openconfig/L3NMOpenConfigServiceHandler.py
@@ -86,12 +86,12 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler):
 
                 json_config_rules = setup_config_rules(
                     service_uuid, connection_uuid, device_uuid, endpoint_uuid, settings, endpoint_settings)
-
-                device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
-                del device.device_config.config_rules[:]
-                for json_config_rule in json_config_rules:
-                    device.device_config.config_rules.append(ConfigRule(**json_config_rule))
-                self.__task_executor.configure_device(device)
+                if len(json_config_rules) > 0:
+                    device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+                    del device.device_config.config_rules[:]
+                    for json_config_rule in json_config_rules:
+                        device.device_config.config_rules.append(ConfigRule(**json_config_rule))
+                    self.__task_executor.configure_device(device)
                 results.append(True)
             except Exception as e: # pylint: disable=broad-except
                 LOGGER.exception('Unable to SetEndpoint({:s})'.format(str(endpoint)))
@@ -121,12 +121,12 @@ class L3NMOpenConfigServiceHandler(_ServiceHandler):
 
                 json_config_rules = teardown_config_rules(
                     service_uuid, connection_uuid, device_uuid, endpoint_uuid, settings, endpoint_settings)
-
-                device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
-                del device.device_config.config_rules[:]
-                for json_config_rule in json_config_rules:
-                    device.device_config.config_rules.append(ConfigRule(**json_config_rule))
-                self.__task_executor.configure_device(device)
+                if len(json_config_rules) > 0:
+                    device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+                    del device.device_config.config_rules[:]
+                    for json_config_rule in json_config_rules:
+                        device.device_config.config_rules.append(ConfigRule(**json_config_rule))
+                    self.__task_executor.configure_device(device)
                 results.append(True)
             except Exception as e: # pylint: disable=broad-except
                 LOGGER.exception('Unable to DeleteEndpoint({:s})'.format(str(endpoint)))
-- 
GitLab


From 2942dea40f427f704442c3b53b7a545f6c9e4c14 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 21 Dec 2022 14:49:14 +0000
Subject: [PATCH 018/229] Tools - load-gen:

- fixing L3NM tests
---
 src/tests/tools/load_gen/RequestGenerator.py | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/tests/tools/load_gen/RequestGenerator.py b/src/tests/tools/load_gen/RequestGenerator.py
index 7f146fe99..51b80d972 100644
--- a/src/tests/tools/load_gen/RequestGenerator.py
+++ b/src/tests/tools/load_gen/RequestGenerator.py
@@ -248,17 +248,19 @@ class RequestGenerator:
             vlan_id = num_request % 100 +100
             x= num_request % 255
             y= num_request % 25 *  num_request % 10
-            bgp_route_target = '{:5d}:{:03d}'.format(bgp_as, 333)
+            bgp_route_target = '{:5d}:{:03d}'.format(bgp_as, vlan_id)
             route_distinguisher = '{:5d}:{:03d}'.format(bgp_as, vlan_id)
             src_router_id = ROUTER_ID.get(src_device_uuid)
-            if src_router_id is None: src_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
+            src_router_num = int(src_device_uuid.replace('R', ''))
+            if src_router_id is None: src_router_id = '10.0.0.{:d}'.format(src_router_num)
+            dst_router_num = int(dst_device_uuid.replace('R', ''))
             dst_router_id = ROUTER_ID.get(dst_device_uuid)
-            if dst_router_id is None: dst_router_id = '10.0.0.{:d}'.format(int(dst_device_uuid.replace('R', '')))
+            if dst_router_id is None: dst_router_id = '10.0.0.{:d}'.format(dst_router_num)
             src_address_ip = '10.{:d}.{:d}.{:d}'.format(x,y,int(src_device_uuid.replace('R', '')))
             dst_address_ip = '10.{:d}.{:d}.{:d}'.format(y,x,int(dst_device_uuid.replace('R', '')))
-            policy_R1 = '7'
-            policy_R2 = '2'
-            
+            policy_R1 = num_request * 10 + src_router_num * 5 + dst_router_num
+            policy_R2 = num_request * 10 + dst_router_num * 5 + src_router_num
+
             config_rules = [
                 json_config_rule_set('/settings', {
                     'bgp_as'          : bgp_as,
-- 
GitLab


From 04ca36b1c79408fd612b9819a88c29127d9939bf Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Thu, 22 Dec 2022 19:20:07 +0100
Subject: [PATCH 019/229] TEST L2VPN changes

---
 .../l2nm_openconfig/ConfigRules.py            | 84 ++++++++----------
 .../L2NMOpenConfigServiceHandler.py           | 24 +++---
 .../l3nm_openconfig/ConfigRules.py            | 86 +++----------------
 src/tests/tools/load_gen/RequestGenerator.py  | 13 ++-
 src/tests/tools/load_gen/__main__.py          |  8 +-
 5 files changed, 76 insertions(+), 139 deletions(-)

diff --git a/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
index f12c9ab98..8d08d6bdd 100644
--- a/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
@@ -20,58 +20,63 @@ def setup_config_rules(
     service_uuid : str, connection_uuid : str, device_uuid : str, endpoint_uuid : str,
     service_settings : TreeNode, endpoint_settings : TreeNode
 ) -> List[Dict]:
+    
+    if service_settings  is None: return []
+    if endpoint_settings is None: return []
+
+    json_settings          : Dict = service_settings.value
+    json_endpoint_settings : Dict = endpoint_settings.value
 
     json_settings          : Dict = {} if service_settings  is None else service_settings.value
     json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
 
-    mtu                 = json_settings.get('mtu',                 1450 )    # 1512
+    #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
     #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
     #bgp_as              = json_settings.get('bgp_as',              0    )    # 65000
     #bgp_route_target    = json_settings.get('bgp_route_target',    '0:0')    # 65000:333
 
-    router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
+    #router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
     #route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
-    sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
+    #sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
     vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     #address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     #address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
-    remote_router       = json_endpoint_settings.get('remote_router',       '0.0.0.0')  # '5.5.5.5'
-    circuit_id          = json_endpoint_settings.get('circuit_id',          '000'    )  # '111'
+    remote_router       = json_endpoint_settings.get('remote_router',       '5.5.5.5')  # '5.5.5.5'
+    circuit_id          = json_endpoint_settings.get('circuit_id',          '111'    )  # '111'
 
     if_cirid_name         = '{:s}.{:s}'.format(endpoint_uuid, str(circuit_id))
     network_instance_name = 'ELAN-AC:{:s}'.format(str(circuit_id))
     connection_point_id   = 'VC-1'
 
     json_config_rules = [
-        json_config_rule_set(
-            '/network_instance[default]',
-            {'name': 'default', 'type': 'DEFAULT_INSTANCE', 'router_id': router_id}),
-
-        json_config_rule_set(
-            '/network_instance[default]/protocols[OSPF]',
-            {'name': 'default', 'identifier': 'OSPF', 'protocol_name': 'OSPF'}),
-
-        json_config_rule_set(
-            '/network_instance[default]/protocols[STATIC]',
-            {'name': 'default', 'identifier': 'STATIC', 'protocol_name': 'STATIC'}),
-
+        
         json_config_rule_set(
             '/network_instance[{:s}]'.format(network_instance_name),
-            {'name': network_instance_name, 'type': 'L2VSI'}),
+            {'name': network_instance_name, 
+             'type': 'L2VSI'}),
 
         json_config_rule_set(
-            '/interface[{:s}]/subinterface[{:d}]'.format(if_cirid_name, sub_interface_index),
-            {'name': if_cirid_name, 'type': 'l2vlan', 'index': sub_interface_index, 'vlan_id': vlan_id}),
+            '/interface[{:s}]/subinterface[0]'.format(if_cirid_name),
+            {'name': if_cirid_name, 
+             'type': 'l2vlan', 
+             'index': 0, 
+             'vlan_id': vlan_id}),
 
         json_config_rule_set(
             '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_cirid_name),
-            {'name': network_instance_name, 'id': if_cirid_name, 'interface': if_cirid_name,
-            'subinterface': sub_interface_index}),
+            {'name': network_instance_name, 
+             'id': if_cirid_name, 
+             'interface': if_cirid_name,
+             'subinterface': 0
+            }),
 
         json_config_rule_set(
             '/network_instance[{:s}]/connection_point[{:s}]'.format(network_instance_name, connection_point_id),
-            {'name': network_instance_name, 'connection_point': connection_point_id, 'VC_ID': circuit_id,
-             'remote_system': remote_router}),
+            {'name': network_instance_name, 
+             'connection_point': connection_point_id, 
+             'VC_ID': circuit_id,
+             'remote_system': remote_router
+            }),
     ]
     return json_config_rules
 
@@ -88,9 +93,9 @@ def teardown_config_rules(
     #bgp_as              = json_settings.get('bgp_as',              0    )    # 65000
     #bgp_route_target    = json_settings.get('bgp_route_target',    '0:0')    # 65000:333
 
-    router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
+    #router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
     #route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
-    sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
+    #sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
     #vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     #address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     #address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
@@ -102,33 +107,16 @@ def teardown_config_rules(
     connection_point_id   = 'VC-1'
 
     json_config_rules = [
-        json_config_rule_delete(
-            '/network_instance[{:s}]/connection_point[{:s}]'.format(network_instance_name, connection_point_id),
-            {'name': network_instance_name, 'connection_point': connection_point_id}),
+        
 
-        json_config_rule_delete(
-            '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_cirid_name),
-            {'name': network_instance_name, 'id': if_cirid_name, 'interface': if_cirid_name,
-            'subinterface': sub_interface_index}),
-
-        json_config_rule_delete(
-            '/interface[{:s}]/subinterface[{:d}]'.format(if_cirid_name, sub_interface_index),
-            {'name': if_cirid_name, 'index': sub_interface_index}),
 
         json_config_rule_delete(
             '/network_instance[{:s}]'.format(network_instance_name),
             {'name': network_instance_name}),
-
-        json_config_rule_delete(
-            '/network_instance[default]/protocols[STATIC]',
-            {'name': 'default', 'identifier': 'STATIC', 'protocol_name': 'STATIC'}),
-
-        json_config_rule_delete(
-            '/network_instance[default]/protocols[OSPF]',
-            {'name': 'default', 'identifier': 'OSPF', 'protocol_name': 'OSPF'}),
-
+        
         json_config_rule_delete(
-            '/network_instance[default]',
-            {'name': 'default', 'type': 'DEFAULT_INSTANCE', 'router_id': router_id}),
+            '/interface[{:s}]'.format(if_cirid_name), {
+            'name': if_cirid_name,
+        }),
     ]
     return json_config_rules
diff --git a/src/service/service/service_handlers/l2nm_openconfig/L2NMOpenConfigServiceHandler.py b/src/service/service/service_handlers/l2nm_openconfig/L2NMOpenConfigServiceHandler.py
index 23df44413..6c41ac785 100644
--- a/src/service/service/service_handlers/l2nm_openconfig/L2NMOpenConfigServiceHandler.py
+++ b/src/service/service/service_handlers/l2nm_openconfig/L2NMOpenConfigServiceHandler.py
@@ -86,12 +86,12 @@ class L2NMOpenConfigServiceHandler(_ServiceHandler):
 
                 json_config_rules = setup_config_rules(
                     service_uuid, connection_uuid, device_uuid, endpoint_uuid, settings, endpoint_settings)
-
-                device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
-                del device.device_config.config_rules[:]
-                for json_config_rule in json_config_rules:
-                    device.device_config.config_rules.append(ConfigRule(**json_config_rule))
-                self.__task_executor.configure_device(device)
+                if len(json_config_rules) > 0:
+                    device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+                    del device.device_config.config_rules[:]
+                    for json_config_rule in json_config_rules:
+                        device.device_config.config_rules.append(ConfigRule(**json_config_rule))
+                    self.__task_executor.configure_device(device)
                 results.append(True)
             except Exception as e: # pylint: disable=broad-except
                 LOGGER.exception('Unable to SetEndpoint({:s})'.format(str(endpoint)))
@@ -121,12 +121,12 @@ class L2NMOpenConfigServiceHandler(_ServiceHandler):
 
                 json_config_rules = teardown_config_rules(
                     service_uuid, connection_uuid, device_uuid, endpoint_uuid, settings, endpoint_settings)
-
-                device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
-                del device.device_config.config_rules[:]
-                for json_config_rule in json_config_rules:
-                    device.device_config.config_rules.append(ConfigRule(**json_config_rule))
-                self.__task_executor.configure_device(device)
+                if len(json_config_rules) > 0:
+                    device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+                    del device.device_config.config_rules[:]
+                    for json_config_rule in json_config_rules:
+                        device.device_config.config_rules.append(ConfigRule(**json_config_rule))
+                    self.__task_executor.configure_device(device)
                 results.append(True)
             except Exception as e: # pylint: disable=broad-except
                 LOGGER.exception('Unable to DeleteEndpoint({:s})'.format(str(endpoint)))
diff --git a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
index 2a8f7794b..40f9d46ea 100644
--- a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
@@ -87,46 +87,6 @@ def setup_config_rules(
                 'interface': if_subif_name,
                 'subinterface': 0,
         }), 
-        json_config_rule_set(
-            '/routing_policy/bgp_defined_set[{:s}_rt_import][{:s}]'.format(
-                network_instance_name, bgp_route_target), {
-                'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name),
-                'ext_community_member'  : 'route-target:{:s}'.format(bgp_route_target),
-        }), 
-        json_config_rule_set(
-            '/routing_policy/policy_definition[{:s}_import]/statement[3]'.format(
-                network_instance_name), {
-                'policy_name': policy_import, 
-                'statement_name': '3',
-                'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name),
-                'policy_result': 'ACCEPT_ROUTE',
-        }), 
-        json_config_rule_set(
-            '/network_instance[{:s}]/inter_instance_policies[{:s}_import]'.format(
-                network_instance_name, policy_import), {
-                'name': network_instance_name, 
-                'import_policy': policy_import,
-        }), 
-        json_config_rule_set(
-            '/routing_policy/bgp_defined_set[{:s}_rt_export][{:s}]'.format(
-                network_instance_name, bgp_route_target), {
-                'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name),
-                'ext_community_member'  : 'route-target:{:s}'.format(bgp_route_target),
-        }), 
-        json_config_rule_set(
-            '/routing_policy/policy_definition[{:s}_export]/statement[3]'.format(
-                network_instance_name), {
-                'policy_name': policy_export, 
-                'statement_name': '3',
-                'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name),
-                'policy_result': 'ACCEPT_ROUTE',
-        }), 
-        json_config_rule_set(
-            '/network_instance[{:s}]/inter_instance_policies[{:s}_export]'.format(
-                network_instance_name, policy_export), {
-                'name': network_instance_name, 
-                'export_policy': policy_export,
-        }),  
         json_config_rule_set(
             '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format(
                 network_instance_name), {
@@ -163,46 +123,28 @@ def teardown_config_rules(
     vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     #address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     #address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
-    policy_import       = json_endpoint_settings.get('policy_1',      2              )  # 2
-    policy_export       = json_endpoint_settings.get('policy_2',      7              )  # 30
+    policy_import       = json_endpoint_settings.get('policy_1',      '2'              )  # 2
+    policy_export       = json_endpoint_settings.get('policy_2',      '7'              )  # 30
 
     if_subif_name       = '{:s}.{:d}'.format(endpoint_uuid, vlan_id)
 
 
     json_config_rules = [
-        json_config_rule_delete(
-            '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format(
-                network_instance_name), {
-                'name': network_instance_name, 
-                'src_protocol': 'DIRECTLY_CONNECTED', 
-                'dst_protocol': 'BGP',
-                'address_family': 'IPV4',
-        }),
-        json_config_rule_delete('/routing_policy/policy_definition[{:s}_import]/statement[3]'.format(
-            network_instance_name),{
-                'policy_name' : policy_import,
-        }),
-
-        json_config_rule_delete('/routing_policy/bgp_defined_set[{:s}_rt_import][{:s}]'.format(
-            network_instance_name,bgp_route_target),{
-                'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name),
-        }),
-        json_config_rule_delete('/routing_policy/policy_definition[{:s}_export]/statement[3]'.format(
-            network_instance_name),{
-                'policy_name' : policy_export,
-        }),
-
-        json_config_rule_delete('/routing_policy/bgp_defined_set[{:s}_rt_import][{:s}]'.format(
-            network_instance_name,bgp_route_target),{
-                'ext_community_set_name': '{:s}_rt_export'.format(network_instance_name),
-        }),
+        # json_config_rule_delete(
+        #     '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_subif_name), {
+        #         'name': network_instance_name, 
+        #         'id': if_subif_name, 
+        #         'interface': if_subif_name,
+        #         'subinterface': 0,
+        # }), 
         json_config_rule_delete(
             '/interface[{:s}]'.format(if_subif_name), {
                 'name': if_subif_name,
         }),
-        json_config_rule_delete(
-            '/network_instance[{:s}]'.format(network_instance_name), {
-                'name': network_instance_name
-        }),
+        # json_config_rule_delete(
+        #     '/network_instance[{:s}]'.format(network_instance_name), {
+        #         'name': network_instance_name
+        # }),
+        
     ]
     return json_config_rules
diff --git a/src/tests/tools/load_gen/RequestGenerator.py b/src/tests/tools/load_gen/RequestGenerator.py
index 51b80d972..419708f85 100644
--- a/src/tests/tools/load_gen/RequestGenerator.py
+++ b/src/tests/tools/load_gen/RequestGenerator.py
@@ -35,6 +35,10 @@ ROUTER_ID = {
     'R149': '5.5.5.5',
     'R155': '5.5.5.1',
 }
+VIRTUALCIRCUIT = {
+    'R149': '5.5.5.5',
+    'R155': '5.5.5.1',
+}
 
 class RequestGenerator:
     def __init__(self, parameters : Parameters) -> None:
@@ -209,11 +213,13 @@ class RequestGenerator:
                 json_constraint_custom('latency[ms]',     '20.0'),
             ]
             vlan_id = num_request % 1000
-            circuit_id = '{:03d}'.format(vlan_id)
+            circuit_id = vlan_id + 100
             src_router_id = ROUTER_ID.get(src_device_uuid)
             if src_router_id is None: src_router_id = '10.0.0.{:d}'.format(int(src_device_uuid.replace('R', '')))
             dst_router_id = ROUTER_ID.get(dst_device_uuid)
             if dst_router_id is None: dst_router_id = '10.0.0.{:d}'.format(int(dst_device_uuid.replace('R', '')))
+            remote = VIRTUALCIRCUIT.get(src_device_uuid)
+            
             config_rules = [
                 json_config_rule_set('/settings', {
                     'mtu': 1512
@@ -224,6 +230,7 @@ class RequestGenerator:
                     'vlan_id': vlan_id,
                     'remote_router': dst_router_id,
                     'circuit_id': circuit_id,
+                    'remote': remote,
                 }),
                 json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                     'router_id': dst_router_id,
@@ -258,8 +265,8 @@ class RequestGenerator:
             if dst_router_id is None: dst_router_id = '10.0.0.{:d}'.format(dst_router_num)
             src_address_ip = '10.{:d}.{:d}.{:d}'.format(x,y,int(src_device_uuid.replace('R', '')))
             dst_address_ip = '10.{:d}.{:d}.{:d}'.format(y,x,int(dst_device_uuid.replace('R', '')))
-            policy_R1 = num_request * 10 + src_router_num * 5 + dst_router_num
-            policy_R2 = num_request * 10 + dst_router_num * 5 + src_router_num
+            policy_R1 = vlan_id = num_request % 100
+            policy_R2 = vlan_id = num_request % 100 +1
 
             config_rules = [
                 json_config_rule_set('/settings', {
diff --git a/src/tests/tools/load_gen/__main__.py b/src/tests/tools/load_gen/__main__.py
index 88b4b16b1..c3e86cc3e 100644
--- a/src/tests/tools/load_gen/__main__.py
+++ b/src/tests/tools/load_gen/__main__.py
@@ -24,15 +24,15 @@ LOGGER = logging.getLogger(__name__)
 def main():
     LOGGER.info('Starting...')
     parameters = Parameters(
-        num_requests = 1,
+        num_requests = 20,
         request_types = [
-            #RequestType.SERVICE_L2NM,
+            RequestType.SERVICE_L2NM,
             RequestType.SERVICE_L3NM,
             #RequestType.SERVICE_TAPI,
             #RequestType.SLICE_L2NM,
             #RequestType.SLICE_L3NM,
-        ],
-        offered_load  = 50,
+        ],                                                                                                                                                                                             
+        offered_load  = 10,
         holding_time  = 10,
         dry_mode      = False,           # in dry mode, no request is sent to TeraFlowSDN
         record_to_dlt = False,           # if record_to_dlt, changes in device/link/service/slice are uploaded to DLT
-- 
GitLab


From e328939cee183f3b8cf2b9959e84f330ed9d689f Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 23 Dec 2022 09:06:44 +0000
Subject: [PATCH 020/229] Device component - OpenConfig Driver

- added device identification per log line
---
 .../drivers/openconfig/OpenConfigDriver.py    | 71 +++++++++++--------
 1 file changed, 40 insertions(+), 31 deletions(-)

diff --git a/src/device/service/drivers/openconfig/OpenConfigDriver.py b/src/device/service/drivers/openconfig/OpenConfigDriver.py
index 4aa42b180..d45ea48c4 100644
--- a/src/device/service/drivers/openconfig/OpenConfigDriver.py
+++ b/src/device/service/drivers/openconfig/OpenConfigDriver.py
@@ -38,8 +38,6 @@ logging.getLogger('apscheduler.executors.default').setLevel(logging.INFO if DEBU
 logging.getLogger('apscheduler.scheduler').setLevel(logging.INFO if DEBUG_MODE else logging.ERROR)
 logging.getLogger('monitoring-client').setLevel(logging.INFO if DEBUG_MODE else logging.ERROR)
 
-LOGGER = logging.getLogger(__name__)
-
 RE_GET_ENDPOINT_FROM_INTERFACE_KEY = re.compile(r'.*interface\[([^\]]+)\].*')
 RE_GET_ENDPOINT_FROM_INTERFACE_XPATH = re.compile(r".*interface\[oci\:name\='([^\]]+)'\].*")
 
@@ -141,8 +139,9 @@ def compute_delta_sample(previous_sample, previous_timestamp, current_sample, cu
     return delta_sample
 
 class SamplesCache:
-    def __init__(self, netconf_handler : NetconfSessionHandler) -> None:
+    def __init__(self, netconf_handler : NetconfSessionHandler, logger : logging.Logger) -> None:
         self.__netconf_handler = netconf_handler
+        self.__logger = logger
         self.__lock = threading.Lock()
         self.__timestamp = None
         self.__absolute_samples = {}
@@ -166,7 +165,7 @@ class SamplesCache:
                     self.__absolute_samples[interface] = samples
                 self.__timestamp = now
             except: # pylint: disable=bare-except
-                LOGGER.exception('Error collecting samples')
+                self.__logger.exception('Error collecting samples')
 
     def get(self, resource_key : str) -> Tuple[float, Dict]:
         self._refresh_samples()
@@ -176,31 +175,33 @@ class SamplesCache:
             interface = match.group(1)
             return self.__timestamp, copy.deepcopy(self.__delta_samples.get(interface, {}))
 
-def do_sampling(samples_cache : SamplesCache, resource_key : str, out_samples : queue.Queue) -> None:
+def do_sampling(
+    samples_cache : SamplesCache, logger : logging.Logger, resource_key : str, out_samples : queue.Queue
+) -> None:
     try:
         timestamp, samples = samples_cache.get(resource_key)
         counter_name = resource_key.split('/')[-1].split(':')[-1]
         value = samples.get(counter_name)
         if value is None:
-            LOGGER.warning('[do_sampling] value not found for {:s}'.format(resource_key))
+            logger.warning('[do_sampling] value not found for {:s}'.format(resource_key))
             return
         sample = (timestamp, resource_key, value)
         out_samples.put_nowait(sample)
     except: # pylint: disable=bare-except
-        LOGGER.exception('Error retrieving samples')
+        logger.exception('Error retrieving samples')
 
 def edit_config(
-    netconf_handler : NetconfSessionHandler, resources : List[Tuple[str, Any]], delete=False, commit_per_rule= False,
-    target='running', default_operation='merge', test_option=None, error_option=None,
+    netconf_handler : NetconfSessionHandler, logger : logging.Logger, resources : List[Tuple[str, Any]], delete=False,
+    commit_per_rule= False, target='running', default_operation='merge', test_option=None, error_option=None,
     format='xml' # pylint: disable=redefined-builtin
 ):
     str_method = 'DeleteConfig' if delete else 'SetConfig'
-    LOGGER.info('[{:s}] resources = {:s}'.format(str_method, str(resources)))
+    logger.info('[{:s}] resources = {:s}'.format(str_method, str(resources)))
     results = [None for _ in resources]
     for i,resource in enumerate(resources):
         str_resource_name = 'resources[#{:d}]'.format(i)
         try:
-            LOGGER.info('[{:s}] resource = {:s}'.format(str_method, str(resource)))
+            logger.info('[{:s}] resource = {:s}'.format(str_method, str(resource)))
             chk_type(str_resource_name, resource, (list, tuple))
             chk_length(str_resource_name, resource, min_length=2, max_length=2)
             resource_key,resource_value = resource
@@ -208,7 +209,7 @@ def edit_config(
             str_config_message = compose_config(
                 resource_key, resource_value, delete=delete, vendor=netconf_handler.vendor)
             if str_config_message is None: raise UnsupportedResourceKeyException(resource_key)
-            LOGGER.info('[{:s}] str_config_message[{:d}] = {:s}'.format(
+            logger.info('[{:s}] str_config_message[{:d}] = {:s}'.format(
                 str_method, len(str_config_message), str(str_config_message)))
             netconf_handler.edit_config(
                 config=str_config_message, target=target, default_operation=default_operation,
@@ -219,7 +220,7 @@ def edit_config(
         except Exception as e: # pylint: disable=broad-except
             str_operation = 'preparing' if target == 'candidate' else ('deleting' if delete else 'setting')
             msg = '[{:s}] Exception {:s} {:s}: {:s}'
-            LOGGER.exception(msg.format(str_method, str_operation, str_resource_name, str(resource)))
+            logger.exception(msg.format(str_method, str_operation, str_resource_name, str(resource)))
             results[i] = e # if validation fails, store the exception
     return results
 
@@ -243,6 +244,7 @@ METRICS_POOL.get_or_create('UnsubscribeState', MetricTypeEnum.HISTOGRAM_DURATION
 
 class OpenConfigDriver(_Driver):
     def __init__(self, address : str, port : int, **settings) -> None: # pylint: disable=super-init-not-called
+        self.__logger = logging.getLogger('{:s}:[{:s}:{:s}]'.format(str(__name__), str(address), str(port)))
         self.__lock = threading.Lock()
         #self.__initial = TreeNode('.')
         #self.__running = TreeNode('.')
@@ -257,7 +259,7 @@ class OpenConfigDriver(_Driver):
             timezone=pytz.utc)
         self.__out_samples = queue.Queue()
         self.__netconf_handler : NetconfSessionHandler = NetconfSessionHandler(address, port, **settings)
-        self.__samples_cache = SamplesCache(self.__netconf_handler)
+        self.__samples_cache = SamplesCache(self.__netconf_handler, self.__logger)
 
     def Connect(self) -> bool:
         with self.__lock:
@@ -295,13 +297,14 @@ class OpenConfigDriver(_Driver):
                 try:
                     chk_string(str_resource_name, resource_key, allow_empty=False)
                     str_filter = get_filter(resource_key)
-                    LOGGER.info('[GetConfig] str_filter = {:s}'.format(str(str_filter)))
+                    self.__logger.info('[GetConfig] str_filter = {:s}'.format(str(str_filter)))
                     if str_filter is None: str_filter = resource_key
                     xml_data = self.__netconf_handler.get(filter=str_filter).data_ele
                     if isinstance(xml_data, Exception): raise xml_data
                     results.extend(parse(resource_key, xml_data))
                 except Exception as e: # pylint: disable=broad-except
-                    LOGGER.exception('Exception retrieving {:s}: {:s}'.format(str_resource_name, str(resource_key)))
+                    MSG = 'Exception retrieving {:s}: {:s}'
+                    self.__logger.exception(MSG.format(str_resource_name, str(resource_key)))
                     results.append((resource_key, e)) # if validation fails, store the exception
         return results
 
@@ -312,17 +315,19 @@ class OpenConfigDriver(_Driver):
         with self.__lock:
             if self.__netconf_handler.use_candidate:
                 with self.__netconf_handler.locked(target='candidate'):
-                    if self.__netconf_handler.commit_per_rule:
-                           results = edit_config(self.__netconf_handler, resources, target='candidate', commit_per_rule= True)
-                    else:
-                        results = edit_config(self.__netconf_handler, resources, target='candidate')
+                    commit_per_rule = bool(self.__netconf_handler.commit_per_rule)
+                    results = edit_config(
+                        self.__netconf_handler, self.__logger, resources, target='candidate',
+                        commit_per_rule=commit_per_rule)
+                    if not commit_per_rule:
                         try:
                             self.__netconf_handler.commit()
                         except Exception as e: # pylint: disable=broad-except
-                            LOGGER.exception('[SetConfig] Exception commiting resources: {:s}'.format(str(resources)))
+                            MSG = '[SetConfig] Exception commiting resources: {:s}'
+                            self.__logger.exception(MSG.format(str(resources)))
                             results = [e for _ in resources] # if commit fails, set exception in each resource
             else:
-                results = edit_config(self.__netconf_handler, resources)
+                results = edit_config(self.__netconf_handler, self.__logger, resources)
         return results
 
     @metered_subclass_method(METRICS_POOL)
@@ -332,17 +337,19 @@ class OpenConfigDriver(_Driver):
         with self.__lock:
             if self.__netconf_handler.use_candidate:
                 with self.__netconf_handler.locked(target='candidate'):
-                    if self.__netconf_handler.commit_per_rule:
-                           results = edit_config(self.__netconf_handler, resources, target='candidate', delete=True, commit_per_rule= True)
-                    else:
-                        results = edit_config(self.__netconf_handler, resources, target='candidate', delete=True)
+                    commit_per_rule = bool(self.__netconf_handler.commit_per_rule)
+                    results = edit_config(
+                        self.__netconf_handler, self.__logger, resources, target='candidate', delete=True,
+                        commit_per_rule=commit_per_rule)
+                    if not commit_per_rule:
                         try:
                             self.__netconf_handler.commit()
                         except Exception as e: # pylint: disable=broad-except
-                            LOGGER.exception('[DeleteConfig] Exception commiting resources: {:s}'.format(str(resources)))
+                            MSG = '[DeleteConfig] Exception commiting resources: {:s}'
+                            self.__logger.exception(MSG.format(str(resources)))
                             results = [e for _ in resources] # if commit fails, set exception in each resource
             else:
-                results = edit_config(self.__netconf_handler, resources, delete=True)
+                results = edit_config(self.__netconf_handler, self.__logger, resources, delete=True)
         return results
 
     @metered_subclass_method(METRICS_POOL)
@@ -363,7 +370,8 @@ class OpenConfigDriver(_Driver):
                     chk_float(str_subscription_name + '.sampling_duration', sampling_duration, min_value=0)
                     chk_float(str_subscription_name + '.sampling_interval', sampling_interval, min_value=0)
                 except Exception as e: # pylint: disable=broad-except
-                    LOGGER.exception('Exception validating {:s}: {:s}'.format(str_subscription_name, str(resource_key)))
+                    MSG = 'Exception validating {:s}: {:s}'
+                    self.__logger.exception(MSG.format(str_subscription_name, str(resource_key)))
                     results.append(e) # if validation fails, store the exception
                     continue
 
@@ -374,7 +382,7 @@ class OpenConfigDriver(_Driver):
 
                 job_id = 'k={:s}/d={:f}/i={:f}'.format(resource_key, sampling_duration, sampling_interval)
                 job = self.__scheduler.add_job(
-                    do_sampling, args=(self.__samples_cache, resource_key, self.__out_samples),
+                    do_sampling, args=(self.__samples_cache, self.__logger, resource_key, self.__out_samples),
                     kwargs={}, id=job_id, trigger='interval', seconds=sampling_interval,
                     start_date=start_date, end_date=end_date, timezone=pytz.utc)
 
@@ -401,7 +409,8 @@ class OpenConfigDriver(_Driver):
                     chk_float(str_subscription_name + '.sampling_duration', sampling_duration, min_value=0)
                     chk_float(str_subscription_name + '.sampling_interval', sampling_interval, min_value=0)
                 except Exception as e: # pylint: disable=broad-except
-                    LOGGER.exception('Exception validating {:s}: {:s}'.format(str_subscription_name, str(resource_key)))
+                    MSG = 'Exception validating {:s}: {:s}'
+                    self.__logger.exception(MSG.format(str_subscription_name, str(resource_key)))
                     results.append(e) # if validation fails, store the exception
                     continue
 
-- 
GitLab


From fe0bcebd30b6711393127f1568da684e5d4dd77f Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Fri, 23 Dec 2022 12:29:11 +0100
Subject: [PATCH 021/229] Correct the delete error message

---
 src/device/service/driver_api/Tools.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/device/service/driver_api/Tools.py b/src/device/service/driver_api/Tools.py
index 19c81d89b..2d8ce8530 100644
--- a/src/device/service/driver_api/Tools.py
+++ b/src/device/service/driver_api/Tools.py
@@ -28,7 +28,7 @@ def _set(resource : Tuple[str, Any]):
     return ACTION_MSG_SET.format(*tuple(map(str, resource)))
 
 def _delete(resource : Tuple[str, Any]):
-    return ACTION_MSG_SET.format(*tuple(map(str, resource)))
+    return ACTION_MSG_DELETE.format(*tuple(map(str, resource)))
 
 def _subscribe(subscription : Tuple[str, float, float]):
     return ACTION_MSG_SUBSCRIBE.format(*tuple(map(str, subscription)))
-- 
GitLab


From 41a1b30d6ff21c8e328a8f9bd672eb60f5ad3f2d Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Fri, 23 Dec 2022 12:29:50 +0100
Subject: [PATCH 022/229] Correct name of commit oer rule variables

---
 src/device/service/drivers/openconfig/OpenConfigDriver.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/device/service/drivers/openconfig/OpenConfigDriver.py b/src/device/service/drivers/openconfig/OpenConfigDriver.py
index d45ea48c4..442ff5d90 100644
--- a/src/device/service/drivers/openconfig/OpenConfigDriver.py
+++ b/src/device/service/drivers/openconfig/OpenConfigDriver.py
@@ -66,7 +66,7 @@ class NetconfSessionHandler:
         self.__look_for_keys  = settings.get('look_for_keys', True)
         self.__allow_agent    = settings.get('allow_agent', True)
         self.__force_running  = settings.get('force_running', False)
-        self.__commit_per_delete  = settings.get('delete_rule', False)
+        self.__commit_per_rule  = settings.get('commit_rule', False)
         self.__device_params  = settings.get('device_params', {})
         self.__manager_params = settings.get('manager_params', {})
         self.__nc_params      = settings.get('nc_params', {})
@@ -92,7 +92,7 @@ class NetconfSessionHandler:
     def use_candidate(self): return self.__candidate_supported and not self.__force_running
 
     @property
-    def commit_per_rule(self): return self.__commit_per_delete 
+    def commit_per_rule(self): return self.__commit_per_rule 
 
     @property
     def vendor(self): return self.__vendor
-- 
GitLab


From 5654a8758f4b1b7c6bc077caa0477cff2e4dd92e Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Fri, 23 Dec 2022 12:30:46 +0100
Subject: [PATCH 023/229] Correct L3VPN templates

---
 .../drivers/openconfig/templates/interface/edit_config.xml      | 1 +
 .../templates/network_instance/interface/edit_config.xml        | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/device/service/drivers/openconfig/templates/interface/edit_config.xml b/src/device/service/drivers/openconfig/templates/interface/edit_config.xml
index 4bc53ff1d..220f062b5 100644
--- a/src/device/service/drivers/openconfig/templates/interface/edit_config.xml
+++ b/src/device/service/drivers/openconfig/templates/interface/edit_config.xml
@@ -4,6 +4,7 @@
         {% if operation is defined and operation != 'delete' %}
         <config>
             <name>{{name}}</name>
+            <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:{{type}}</type>
             <description></description>
             <mtu>{{mtu}}</mtu>
         </config>
diff --git a/src/device/service/drivers/openconfig/templates/network_instance/interface/edit_config.xml b/src/device/service/drivers/openconfig/templates/network_instance/interface/edit_config.xml
index bf8c0c077..855f321b4 100644
--- a/src/device/service/drivers/openconfig/templates/network_instance/interface/edit_config.xml
+++ b/src/device/service/drivers/openconfig/templates/network_instance/interface/edit_config.xml
@@ -2,7 +2,7 @@
     <network-instance>
         <name>{{name}}</name>
         <interfaces>
-            <interface>
+            <interface{% if operation is defined %} xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="{{operation}}"{% endif %}>
                 <id>{{id}}</id>
                 <config>
                     <id>{{id}}</id>
-- 
GitLab


From bb5907a1cb3df00f8b9b5114b42e087cd85e2159 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 23 Dec 2022 12:19:51 +0000
Subject: [PATCH 024/229] Device component:

- fixes to collect performance evalaution values
- structural architectures in openconfig driver
---
 .../service/DeviceServiceServicerImpl.py      |  6 ++--
 .../drivers/openconfig/OpenConfigDriver.py    | 28 +++++++------------
 2 files changed, 13 insertions(+), 21 deletions(-)

diff --git a/src/device/service/DeviceServiceServicerImpl.py b/src/device/service/DeviceServiceServicerImpl.py
index 88f49de6f..b6b053df3 100644
--- a/src/device/service/DeviceServiceServicerImpl.py
+++ b/src/device/service/DeviceServiceServicerImpl.py
@@ -214,12 +214,12 @@ class DeviceServiceServicerImpl(DeviceServiceServicer):
             driver : _Driver = self.driver_instance_cache.get(device_uuid)
             if driver is None:
                 errors.append('Device({:s}) has not been added to this Device instance'.format(str(device_uuid)))
-
-            if len(errors) == 0:
+            else:
+                #if len(errors) == 0:
                 results_setconfig = driver.SetConfig(resources_to_set)
                 errors.extend(check_set_errors(resources_to_set, results_setconfig))
 
-            if len(errors) == 0:
+                #if len(errors) == 0:
                 results_deleteconfig = driver.DeleteConfig(resources_to_delete)
                 errors.extend(check_delete_errors(resources_to_delete, results_deleteconfig))
 
diff --git a/src/device/service/drivers/openconfig/OpenConfigDriver.py b/src/device/service/drivers/openconfig/OpenConfigDriver.py
index d45ea48c4..305814e05 100644
--- a/src/device/service/drivers/openconfig/OpenConfigDriver.py
+++ b/src/device/service/drivers/openconfig/OpenConfigDriver.py
@@ -222,6 +222,14 @@ def edit_config(
             msg = '[{:s}] Exception {:s} {:s}: {:s}'
             logger.exception(msg.format(str_method, str_operation, str_resource_name, str(resource)))
             results[i] = e # if validation fails, store the exception
+
+    if not commit_per_rule:
+        try:
+            netconf_handler.commit()
+        except Exception as e: # pylint: disable=broad-except
+            msg = '[{:s}] Exception committing: {:s}'
+            logger.exception(msg.format(str_method, str_operation, str(resources)))
+            results = [e for _ in resources] # if commit fails, set exception in each resource
     return results
 
 HISTOGRAM_BUCKETS = (
@@ -315,17 +323,9 @@ class OpenConfigDriver(_Driver):
         with self.__lock:
             if self.__netconf_handler.use_candidate:
                 with self.__netconf_handler.locked(target='candidate'):
-                    commit_per_rule = bool(self.__netconf_handler.commit_per_rule)
                     results = edit_config(
                         self.__netconf_handler, self.__logger, resources, target='candidate',
-                        commit_per_rule=commit_per_rule)
-                    if not commit_per_rule:
-                        try:
-                            self.__netconf_handler.commit()
-                        except Exception as e: # pylint: disable=broad-except
-                            MSG = '[SetConfig] Exception commiting resources: {:s}'
-                            self.__logger.exception(MSG.format(str(resources)))
-                            results = [e for _ in resources] # if commit fails, set exception in each resource
+                        commit_per_rule=self.__netconf_handler.commit_per_rule)
             else:
                 results = edit_config(self.__netconf_handler, self.__logger, resources)
         return results
@@ -337,17 +337,9 @@ class OpenConfigDriver(_Driver):
         with self.__lock:
             if self.__netconf_handler.use_candidate:
                 with self.__netconf_handler.locked(target='candidate'):
-                    commit_per_rule = bool(self.__netconf_handler.commit_per_rule)
                     results = edit_config(
                         self.__netconf_handler, self.__logger, resources, target='candidate', delete=True,
-                        commit_per_rule=commit_per_rule)
-                    if not commit_per_rule:
-                        try:
-                            self.__netconf_handler.commit()
-                        except Exception as e: # pylint: disable=broad-except
-                            MSG = '[DeleteConfig] Exception commiting resources: {:s}'
-                            self.__logger.exception(MSG.format(str(resources)))
-                            results = [e for _ in resources] # if commit fails, set exception in each resource
+                        commit_per_rule=self.__netconf_handler.commit_per_rule)
             else:
                 results = edit_config(self.__netconf_handler, self.__logger, resources, delete=True)
         return results
-- 
GitLab


From 3a2cbc91a3ce8cbef669cbd7f255003d4d2c32e7 Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Mon, 9 Jan 2023 15:20:57 +0100
Subject: [PATCH 025/229] L3NM OpenConfig changes

---
 .../l3nm_openconfig/ConfigRules.py            | 123 +++++++++++++-----
 src/tests/tools/load_gen/RequestGenerator.py  |  10 +-
 2 files changed, 97 insertions(+), 36 deletions(-)

diff --git a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
index 40f9d46ea..7e437276b 100644
--- a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
@@ -35,10 +35,8 @@ def setup_config_rules(
     mtu                 = 3000   # 1512
     #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
     bgp_as              = json_settings.get('bgp_as',              65000    )    # 65000
-    bgp_route_target    = json_settings.get('bgp_route_target',    '65000:123')    # 65000:333
-
+    route_distinguisher = json_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
     router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
-    route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
     vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
@@ -48,6 +46,7 @@ def setup_config_rules(
     if_subif_name       = '{:s}.{:d}'.format(endpoint_uuid, vlan_id)
 
     json_config_rules = [
+        #Create network instance
         json_config_rule_set(
             '/network_instance[{:s}]'.format(network_instance_name), {
                 'name': network_instance_name, 
@@ -55,6 +54,7 @@ def setup_config_rules(
                 'type': 'L3VRF',
                 'route_distinguisher': route_distinguisher,
         }),
+        #Add BGP protocol to network instance
         json_config_rule_set(
             '/network_instance[{:s}]/protocols[BGP]'.format(network_instance_name), {
                 'name': network_instance_name, 
@@ -63,12 +63,14 @@ def setup_config_rules(
                 'as': bgp_as,
                 'router_id': router_id, 
         }),
-         json_config_rule_set(
+        #Add DIRECTLY CONNECTED protocol to network instance
+        json_config_rule_set(
             '/network_instance[{:s}]/protocols[DIRECTLY_CONNECTED]'.format(network_instance_name), {
                 'name': network_instance_name, 
                 'identifier': 'DIRECTLY_CONNECTED', 
                 'protocol_name': 'DIRECTLY_CONNECTED',
         }),
+        #Create interface with subinterface
         json_config_rule_set(
             '/interface[{:s}]/subinterface[0]'.format(if_subif_name), {
                 'name': if_subif_name, 
@@ -80,6 +82,7 @@ def setup_config_rules(
                 'address_ip': address_ip, 
                 'address_prefix': address_prefix,
         }),
+        #Associate interface to network instance
         json_config_rule_set(
             '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_subif_name), {
                 'name': network_instance_name, 
@@ -87,6 +90,49 @@ def setup_config_rules(
                 'interface': if_subif_name,
                 'subinterface': 0,
         }), 
+        #Create routing policy
+        json_config_rule_set('/routing_policy/bgp_defined_set[{:s}_rt_import][{:s}]'.format(
+            policy_import,route_distinguisher),{
+            'ext_community_set_name': 'set_{:s}'.format(policy_import),
+            'ext_community_member'  : route_distinguisher,
+        }),
+        json_config_rule_set(
+            '/routing_policy/policy_definition[{:s}_import]/statement[{:s}]'.format(
+                policy_import, policy_import),{
+            'policy_name'           : policy_import,
+            'statement_name'        : 'stm_{:s}'.format(policy_import),
+            'ext_community_set_name': 'set_{:s}'.format(policy_import),
+            'policy_result'         : 'ACCEPT_ROUTE',
+        }),
+        #Associate routing policy to network instance
+        json_config_rule_set(
+            '/network_instance[{:s}]/inter_instance_policies[{:s}]'.format(
+                network_instance_name, policy_import),{
+            'name'         : network_instance_name,
+            'import_policy': policy_import,
+        }), 
+        #Create routing policy
+        json_config_rule_set('/routing_policy/bgp_defined_set[{:s}_rt_export][{:s}]'.format(
+            policy_export,route_distinguisher),{
+            'ext_community_set_name': 'set_{:s}'.format(policy_export),
+            'ext_community_member'  : route_distinguisher,
+        }),
+        json_config_rule_set(
+            '/routing_policy/policy_definition[{:s}_export]/statement[{:s}]'.format(
+                policy_export, policy_export),{
+            'policy_name'           : policy_export,
+            'statement_name'        : 'stm_{:s}'.format(policy_export),
+            'ext_community_set_name': 'set_{:s}'.format(policy_export),
+            'policy_result'         : 'ACCEPT_ROUTE',
+        }),
+        #Associate routing policy to network instance
+        json_config_rule_set(
+            '/network_instance[{:s}]/inter_instance_policies[{:s}]'.format(
+                network_instance_name, policy_export),{
+            'name'         : network_instance_name,
+            'export_policy': policy_export,
+        }),
+        #Create table connections
         json_config_rule_set(
             '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format(
                 network_instance_name), {
@@ -110,41 +156,58 @@ def teardown_config_rules(
 
     service_short_uuid        = service_uuid.split('-')[-1]
     network_instance_name     = '{:s}-NetInst'.format(service_short_uuid)
+    route_distinguisher = json_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
+    vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
+    policy_import       = json_endpoint_settings.get('policy_1',      '2'              )  # 2
+    policy_export       = json_endpoint_settings.get('policy_2',      '7'              )  # 30
+    if_subif_name       = '{:s}.{:d}'.format(endpoint_uuid, vlan_id)
     #network_interface_desc    = '{:s}-NetIf'.format(service_uuid)
     #network_subinterface_desc = '{:s}-NetSubIf'.format(service_uuid)
-
-    #mtu                 = json_settings.get('mtu',                 3000 )    # 1512
+    #mtu                 = 3000   # 1512
     #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
     #bgp_as              = json_settings.get('bgp_as',              65000    )    # 65000
-    bgp_route_target    = json_settings.get('bgp_route_target',    '65000:123')    # 65000:333
-
     #router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
-    #route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
-    vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     #address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     #address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
-    policy_import       = json_endpoint_settings.get('policy_1',      '2'              )  # 2
-    policy_export       = json_endpoint_settings.get('policy_2',      '7'              )  # 30
-
-    if_subif_name       = '{:s}.{:d}'.format(endpoint_uuid, vlan_id)
-
 
     json_config_rules = [
-        # json_config_rule_delete(
-        #     '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_subif_name), {
-        #         'name': network_instance_name, 
-        #         'id': if_subif_name, 
-        #         'interface': if_subif_name,
-        #         'subinterface': 0,
-        # }), 
-        json_config_rule_delete(
-            '/interface[{:s}]'.format(if_subif_name), {
-                'name': if_subif_name,
+    #Delete table connections
+    json_config_rule_delete(
+        '/network_instance[{:s}]/table_connections[DIRECTLY_CONNECTED][BGP][IPV4]'.format(network_instance_name),{
+        'name'          : network_instance_name, 
+        'src_protocol'  : 'DIRECTLY_CONNECTED',
+        'dst_protocol'  : 'BGP',
+        'address_family': 'IPV4', 
+    }),
+    #Delete routing policy 
+    json_config_rule_delete(
+            '/routing_policy/policy_definition[{:s}_export]/statement[{:s}]'.format(
+                policy_export, policy_export),{
+            'policy_name'           : policy_export,
+        }),
+    json_config_rule_delete('/routing_policy/bgp_defined_set[{:s}_rt_export][{:s}]'.format(
+        policy_export,route_distinguisher),{
+            'ext_community_set_name': 'set_{:s}'.format(policy_export),
+        }),
+    #Delete routing policy 
+    json_config_rule_delete(
+            '/routing_policy/policy_definition[{:s}_import]/statement[{:s}]'.format(
+                policy_import, policy_import),{
+            'policy_name'           : policy_import,
+        }),
+    json_config_rule_delete('/routing_policy/bgp_defined_set[{:s}_rt_import][{:s}]'.format(
+        policy_import,route_distinguisher),{
+            'ext_community_set_name': 'set_{:s}'.format(policy_import),
         }),
-        # json_config_rule_delete(
-        #     '/network_instance[{:s}]'.format(network_instance_name), {
-        #         'name': network_instance_name
-        # }),
-        
+    #Delete interface
+    json_config_rule_delete('/interface[{:s}]'.format(if_subif_name),
+    {
+        'name': if_subif_name,
+    }), 
+    #Delete network instance 
+    json_config_rule_delete('/network_instance[{:s}]'.format(network_instance_name),
+    {
+        'name': network_instance_name
+    }),
     ]
     return json_config_rules
diff --git a/src/tests/tools/load_gen/RequestGenerator.py b/src/tests/tools/load_gen/RequestGenerator.py
index 79261bcfc..8f900d935 100644
--- a/src/tests/tools/load_gen/RequestGenerator.py
+++ b/src/tests/tools/load_gen/RequestGenerator.py
@@ -268,7 +268,6 @@ class RequestGenerator:
             vlan_id = num_request % 100 +100
             x= num_request % 255
             y= num_request % 25 *  num_request % 10
-            bgp_route_target = '{:5d}:{:03d}'.format(bgp_as, vlan_id)
             route_distinguisher = '{:5d}:{:03d}'.format(bgp_as, vlan_id)
             src_router_id = ROUTER_ID.get(src_device_uuid)
             src_router_num = int(src_device_uuid.replace('R', ''))
@@ -278,17 +277,17 @@ class RequestGenerator:
             if dst_router_id is None: dst_router_id = '10.0.0.{:d}'.format(dst_router_num)
             src_address_ip = '10.{:d}.{:d}.{:d}'.format(x,y,int(src_device_uuid.replace('R', '')))
             dst_address_ip = '10.{:d}.{:d}.{:d}'.format(y,x,int(dst_device_uuid.replace('R', '')))
-            policy_R1 = vlan_id = num_request % 100
-            policy_R2 = vlan_id = num_request % 100 +1
+            policy_R1 = 'srv_{:d}_a'.format(vlan_id)
+            policy_R2 = 'srv_{:d}_b'.format(vlan_id)
 
             config_rules = [
                 json_config_rule_set('/settings', {
                     'bgp_as'          : bgp_as,
-                    'bgp_route_target': bgp_route_target,
+                    'route_distinguisher': route_distinguisher,
+
                 }),
                 json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_uuid, src_endpoint_uuid), {
                     'router_id'          : src_router_id,
-                    'route_distinguisher': route_distinguisher,
                     'vlan_id'            : vlan_id,
                     'address_ip'         : src_address_ip,
                     'address_prefix'     : 16,
@@ -298,7 +297,6 @@ class RequestGenerator:
                 }),
                 json_config_rule_set('/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_uuid, dst_endpoint_uuid), {
                     'router_id'          : dst_router_id,
-                    'route_distinguisher': route_distinguisher,
                     'vlan_id'            : vlan_id,
                     'address_ip'         : dst_address_ip,
                     'address_prefix'     : 16,
-- 
GitLab


From cba8b97fd85cfb973451edd4a4dbf5d7a94d3f30 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 6 Feb 2023 14:24:07 +0000
Subject: [PATCH 026/229] Compute component:

- Corrected structure of Debug API
- Updated paths and endpoints
- Removed unneeded common constants
---
 src/common/Constants.py                       |  3 +-
 src/compute/service/__main__.py               |  2 +-
 .../nbi_plugins/debug_api/Resources.py        | 44 ++-------------
 .../nbi_plugins/debug_api/Tools.py            | 54 +++++++++++++++++++
 .../nbi_plugins/debug_api/__init__.py         | 36 ++++++-------
 .../nbi_plugins/ietf_l2vpn/__init__.py        |  2 +-
 6 files changed, 77 insertions(+), 64 deletions(-)
 create mode 100644 src/compute/service/rest_server/nbi_plugins/debug_api/Tools.py

diff --git a/src/common/Constants.py b/src/common/Constants.py
index c0b4cbf05..a7bf198a7 100644
--- a/src/common/Constants.py
+++ b/src/common/Constants.py
@@ -83,7 +83,6 @@ DEFAULT_SERVICE_HTTP_PORTS = {
 
 # Default HTTP/REST-API service base URLs
 DEFAULT_SERVICE_HTTP_BASEURLS = {
-    ServiceNameEnum.CONTEXT   .value : '/api',
-    ServiceNameEnum.COMPUTE   .value : '/restconf/data',
+    ServiceNameEnum.COMPUTE   .value : '/restconf',
     ServiceNameEnum.WEBUI     .value : None,
 }
diff --git a/src/compute/service/__main__.py b/src/compute/service/__main__.py
index 998c4c98f..9705e3187 100644
--- a/src/compute/service/__main__.py
+++ b/src/compute/service/__main__.py
@@ -26,7 +26,7 @@ from .rest_server.nbi_plugins.ietf_l2vpn import register_ietf_l2vpn
 terminate = threading.Event()
 LOGGER = None
 
-def signal_handler(signal, frame): # pylint: disable=redefined-outer-name
+def signal_handler(signal, frame): # pylint: disable=redefined-outer-name, unused-argument
     LOGGER.warning('Terminate signal received')
     terminate.set()
 
diff --git a/src/compute/service/rest_server/nbi_plugins/debug_api/Resources.py b/src/compute/service/rest_server/nbi_plugins/debug_api/Resources.py
index 0c66254d9..67ef3dfb0 100644
--- a/src/compute/service/rest_server/nbi_plugins/debug_api/Resources.py
+++ b/src/compute/service/rest_server/nbi_plugins/debug_api/Resources.py
@@ -12,48 +12,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from flask.json import jsonify
 from flask_restful import Resource
-from common.proto.context_pb2 import ConnectionId, ContextId, DeviceId, Empty, LinkId, ServiceId, SliceId, TopologyId
-from common.proto.policy_pb2 import PolicyRuleId
-from common.tools.grpc.Tools import grpc_message_to_json
-from common.tools.object_factory.Connection import json_connection_id
-from common.tools.object_factory.Context import json_context_id
-from common.tools.object_factory.Device import json_device_id
-from common.tools.object_factory.Link import json_link_id
-from common.tools.object_factory.PolicyRule import json_policyrule_id
-from common.tools.object_factory.Service import json_service_id
-from common.tools.object_factory.Slice import json_slice_id
-from common.tools.object_factory.Topology import json_topology_id
+from common.proto.context_pb2 import Empty
 from context.client.ContextClient import ContextClient
-
-
-def format_grpc_to_json(grpc_reply):
-    return jsonify(grpc_message_to_json(grpc_reply))
-
-def grpc_connection_id(connection_uuid):
-    return ConnectionId(**json_connection_id(connection_uuid))
-
-def grpc_context_id(context_uuid):
-    return ContextId(**json_context_id(context_uuid))
-
-def grpc_device_id(device_uuid):
-    return DeviceId(**json_device_id(device_uuid))
-
-def grpc_link_id(link_uuid):
-    return LinkId(**json_link_id(link_uuid))
-
-def grpc_service_id(context_uuid, service_uuid):
-    return ServiceId(**json_service_id(service_uuid, context_id=json_context_id(context_uuid)))
-
-def grpc_slice_id(context_uuid, slice_uuid):
-    return SliceId(**json_slice_id(slice_uuid, context_id=json_context_id(context_uuid)))
-    
-def grpc_topology_id(context_uuid, topology_uuid):
-    return TopologyId(**json_topology_id(topology_uuid, context_id=json_context_id(context_uuid)))
-
-def grpc_policy_rule_id(policy_rule_uuid):
-    return PolicyRuleId(**json_policyrule_id(policy_rule_uuid))
+from .Tools import (
+    format_grpc_to_json, grpc_connection_id, grpc_context_id, grpc_device_id, grpc_link_id, grpc_policy_rule_id,
+    grpc_service_id, grpc_slice_id, grpc_topology_id)
 
 
 class _Resource(Resource):
diff --git a/src/compute/service/rest_server/nbi_plugins/debug_api/Tools.py b/src/compute/service/rest_server/nbi_plugins/debug_api/Tools.py
new file mode 100644
index 000000000..f3dff545b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/debug_api/Tools.py
@@ -0,0 +1,54 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 flask.json import jsonify
+from common.proto.context_pb2 import ConnectionId, ContextId, DeviceId, LinkId, ServiceId, SliceId, TopologyId
+from common.proto.policy_pb2 import PolicyRuleId
+from common.tools.grpc.Tools import grpc_message_to_json
+from common.tools.object_factory.Connection import json_connection_id
+from common.tools.object_factory.Context import json_context_id
+from common.tools.object_factory.Device import json_device_id
+from common.tools.object_factory.Link import json_link_id
+from common.tools.object_factory.PolicyRule import json_policyrule_id
+from common.tools.object_factory.Service import json_service_id
+from common.tools.object_factory.Slice import json_slice_id
+from common.tools.object_factory.Topology import json_topology_id
+
+
+def format_grpc_to_json(grpc_reply):
+    return jsonify(grpc_message_to_json(grpc_reply))
+
+def grpc_connection_id(connection_uuid):
+    return ConnectionId(**json_connection_id(connection_uuid))
+
+def grpc_context_id(context_uuid):
+    return ContextId(**json_context_id(context_uuid))
+
+def grpc_device_id(device_uuid):
+    return DeviceId(**json_device_id(device_uuid))
+
+def grpc_link_id(link_uuid):
+    return LinkId(**json_link_id(link_uuid))
+
+def grpc_service_id(context_uuid, service_uuid):
+    return ServiceId(**json_service_id(service_uuid, context_id=json_context_id(context_uuid)))
+
+def grpc_slice_id(context_uuid, slice_uuid):
+    return SliceId(**json_slice_id(slice_uuid, context_id=json_context_id(context_uuid)))
+    
+def grpc_topology_id(context_uuid, topology_uuid):
+    return TopologyId(**json_topology_id(topology_uuid, context_id=json_context_id(context_uuid)))
+
+def grpc_policy_rule_id(policy_rule_uuid):
+    return PolicyRuleId(**json_policyrule_id(policy_rule_uuid))
diff --git a/src/compute/service/rest_server/nbi_plugins/debug_api/__init__.py b/src/compute/service/rest_server/nbi_plugins/debug_api/__init__.py
index d9243cca7..d1309353c 100644
--- a/src/compute/service/rest_server/nbi_plugins/debug_api/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/debug_api/__init__.py
@@ -12,52 +12,48 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# RFC 8466 - L2VPN Service Model (L2SM)
-# Ref: https://datatracker.ietf.org/doc/html/rfc8466
-
 from compute.service.rest_server.RestServer import RestServer
 from .Resources import (
     Connection, ConnectionIds, Connections, Context, ContextIds, Contexts, Device, DeviceIds, Devices, Link, LinkIds,
     Links, PolicyRule, PolicyRuleIds, PolicyRules, Service, ServiceIds, Services, Slice, SliceIds, Slices, Topologies,
     Topology, TopologyIds)
 
-URL_PREFIX = '/api'
+URL_PREFIX = '/debug-api'
 
-# Use 'path' type in Service and Sink because service_uuid and link_uuid might contain char '/' and Flask is unable to
-# recognize them in 'string' type.
+# Use 'path' type since some identifiers might contain char '/' and Flask is unable to recognize them in 'string' type.
 RESOURCES = [
     # (endpoint_name, resource_class, resource_url)
     ('api.context_ids',    ContextIds,    '/context_ids'),
     ('api.contexts',       Contexts,      '/contexts'),
-    ('api.context',        Context,       '/context/<string:context_uuid>'),
+    ('api.context',        Context,       '/context/<path:context_uuid>'),
 
-    ('api.topology_ids',   TopologyIds,   '/context/<string:context_uuid>/topology_ids'),
-    ('api.topologies',     Topologies,    '/context/<string:context_uuid>/topologies'),
-    ('api.topology',       Topology,      '/context/<string:context_uuid>/topology/<string:topology_uuid>'),
+    ('api.topology_ids',   TopologyIds,   '/context/<path:context_uuid>/topology_ids'),
+    ('api.topologies',     Topologies,    '/context/<path:context_uuid>/topologies'),
+    ('api.topology',       Topology,      '/context/<path:context_uuid>/topology/<path:topology_uuid>'),
 
-    ('api.service_ids',    ServiceIds,    '/context/<string:context_uuid>/service_ids'),
-    ('api.services',       Services,      '/context/<string:context_uuid>/services'),
-    ('api.service',        Service,       '/context/<string:context_uuid>/service/<path:service_uuid>'),
+    ('api.service_ids',    ServiceIds,    '/context/<path:context_uuid>/service_ids'),
+    ('api.services',       Services,      '/context/<path:context_uuid>/services'),
+    ('api.service',        Service,       '/context/<path:context_uuid>/service/<path:service_uuid>'),
 
-    ('api.slice_ids',      SliceIds,      '/context/<string:context_uuid>/slice_ids'),
-    ('api.slices',         Slices,        '/context/<string:context_uuid>/slices'),
-    ('api.slice',          Slice,         '/context/<string:context_uuid>/slice/<path:slice_uuid>'),
+    ('api.slice_ids',      SliceIds,      '/context/<path:context_uuid>/slice_ids'),
+    ('api.slices',         Slices,        '/context/<path:context_uuid>/slices'),
+    ('api.slice',          Slice,         '/context/<path:context_uuid>/slice/<path:slice_uuid>'),
 
     ('api.device_ids',     DeviceIds,     '/device_ids'),
     ('api.devices',        Devices,       '/devices'),
-    ('api.device',         Device,        '/device/<string:device_uuid>'),
+    ('api.device',         Device,        '/device/<path:device_uuid>'),
 
     ('api.link_ids',       LinkIds,       '/link_ids'),
     ('api.links',          Links,         '/links'),
     ('api.link',           Link,          '/link/<path:link_uuid>'),
 
-    ('api.connection_ids', ConnectionIds, '/context/<string:context_uuid>/service/<path:service_uuid>/connection_ids'),
-    ('api.connections',    Connections,   '/context/<string:context_uuid>/service/<path:service_uuid>/connections'),
+    ('api.connection_ids', ConnectionIds, '/context/<path:context_uuid>/service/<path:service_uuid>/connection_ids'),
+    ('api.connections',    Connections,   '/context/<path:context_uuid>/service/<path:service_uuid>/connections'),
     ('api.connection',     Connection,    '/connection/<path:connection_uuid>'),
 
     ('api.policyrule_ids', PolicyRuleIds, '/policyrule_ids'),
     ('api.policyrules',    PolicyRules,   '/policyrules'),
-    ('api.policyrule',     PolicyRule,    '/policyrule/<string:policyrule_uuid>'),
+    ('api.policyrule',     PolicyRule,    '/policyrule/<path:policyrule_uuid>'),
 ]
 
 def register_debug_api(rest_server : RestServer):
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py
index 1b9027b1f..110c51af5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/__init__.py
@@ -21,7 +21,7 @@ from .L2VPN_Services import L2VPN_Services
 from .L2VPN_Service import L2VPN_Service
 from .L2VPN_SiteNetworkAccesses import L2VPN_SiteNetworkAccesses
 
-URL_PREFIX = '/ietf-l2vpn-svc:l2vpn-svc'
+URL_PREFIX = '/data/ietf-l2vpn-svc:l2vpn-svc'
 
 def _add_resource(rest_server : RestServer, resource : Resource, *urls, **kwargs):
     urls = [(URL_PREFIX + url) for url in urls]
-- 
GitLab


From 4630c247f79e4ef8283194d9f254e0350eff827b Mon Sep 17 00:00:00 2001
From: Ville Hallivuori <VHallivuori@infinera.com>
Date: Tue, 7 Feb 2023 12:36:40 +0200
Subject: [PATCH 027/229] * Support IPM API 0.8.31 (removal of component
 identifier from REST API object URLs) * Support TeraFlow 2.0 changed service
 URL format * Support TeraFlow 2.0 persistence (handle delete requests for
 persisted objects properly)

---
 src/device/service/drivers/xr/README_XR.md    | 52 ++++++++++++----
 src/device/service/drivers/xr/XrDriver.py     |  6 +-
 src/device/service/drivers/xr/cm-cli.py       |  0
 .../service/drivers/xr/cm/cm_connection.py    | 34 +++++------
 .../service/drivers/xr/cm/connection.py       |  3 +
 .../drivers/xr/cm/tests/test_cm_connection.py |  4 +-
 .../xr/cm/tests/test_xr_service_set_config.py | 60 +++++++++----------
 7 files changed, 98 insertions(+), 61 deletions(-)
 mode change 100644 => 100755 src/device/service/drivers/xr/cm-cli.py

diff --git a/src/device/service/drivers/xr/README_XR.md b/src/device/service/drivers/xr/README_XR.md
index 3bfdf5b01..108a36769 100644
--- a/src/device/service/drivers/xr/README_XR.md
+++ b/src/device/service/drivers/xr/README_XR.md
@@ -25,6 +25,19 @@ cd ~/.kube
 microk8s config > config
 ```
 
+Helm 3 is mandatory as of February 2023. Enable it with microk8s command. Then create wrapper shell script to expose it with standard name:
+
+```
+sudo su -
+cat > /usr/bin/helm3
+#!/bin/sh
+microk8s.helm3 "$@"
+^D
+chmod 755 /usr/bin/helm3
+```
+
+Using symbolic link does not work, because snap wraps the real binary and won't work if name is different.
+
 Local Docker registry is needed for build results. Use the following command to start local registry (docker will pull necessary images from Internet)
 
 ```bash
@@ -32,23 +45,33 @@ docker run -d -p 32000:5000 --restart=always --name registry registry:2
 ```
 
 Setup mydeploy script outside the git repo. E.g. following will do. SOURCE IT ON ALL SHELLS.
-
-IMPORTANT: September 2022 version of controller has a bug where any update to device trigger update to device
-until GRPC endpoints are so loaded that K8s kills device service. XR does not need automation service, so it can
-be left out.
+Use https://labs.etsi.org/rep/tfs/controller/-/blob/develop/my_deploy.sh as example.
+Script requires more variables than before as of February 2023.
 
 ```bash
+# See https://labs.etsi.org/rep/tfs/controller/-/blob/develop/my_deploy.sh
+# Use  docker run -d -p 32000:5000 --restart=always --name registry registry:2 
 export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/"
-# Without automation service (see note above)
-export TFS_COMPONENTS="context device pathcomp service slice compute monitoring webui"
-# Correct setting
-# export TFS_COMPONENTS="context device automation pathcomp service slice compute monitoring webui"
-# Pre-rebase
-#export TFS_COMPONENTS="context device automation service compute monitoring webui"
+export TFS_COMPONENTS="context device automation monitoring pathcomp service slice compute webui load_generator"
 export TFS_IMAGE_TAG="dev"
 export TFS_K8S_NAMESPACE="tfs"
 export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml"
 export TFS_GRAFANA_PASSWORD="admin123+"
+#export TFS_SKIP_BUILD=""
+export CRDB_NAMESPACE="crdb"
+export CRDB_USERNAME="tfs"
+export CRDB_PASSWORD="tfs123"
+export CRDB_DATABASE="tfs"
+export CRDB_DEPLOY_MODE="single"
+export CRDB_DROP_DATABASE_IF_EXISTS=""
+export CRDB_REDEPLOY=""
+export NATS_NAMESPACE="nats"
+export NATS_REDEPLOY=""
+export QDB_NAMESPACE="qdb"
+export QDB_USERNAME="admin"
+export QDB_PASSWORD="quest"
+export QDB_TABLE="tfs_monitoring"
+export QDB_REDEPLOY=""
 ```
 
 Build is containerized, pytest used for setup is not. Teraflow has some third party venv suggestion in docs. However standard venv works. Create:
@@ -119,6 +142,15 @@ Good logs to check are:
 * kubectl logs   service/deviceservice     --namespace tfs
 * kubectl logs   service/webuiservice     --namespace tfs
 
+New 2.0 version of Teraflow has persistent database. To clean up any failed state
+(e.g. from debugging session), set before deploy:
+
+```
+export CRDB_DROP_DATABASE_IF_EXISTS=YES 
+```
+
+In normal test runs it is not necessary to clear the database. However DO NOT RE-UPLOAD THE TOPOLOGY JSON FILE if DB has not been cleared.
+
 ## Unit Tests
 Run in src directory (src under repo top level) with command:
 
diff --git a/src/device/service/drivers/xr/XrDriver.py b/src/device/service/drivers/xr/XrDriver.py
index 565e3692f..605f4ce8d 100644
--- a/src/device/service/drivers/xr/XrDriver.py
+++ b/src/device/service/drivers/xr/XrDriver.py
@@ -106,8 +106,10 @@ class XrDriver(_Driver):
     def SetConfig(self, resources: List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
         LOGGER.info(f"SetConfig[{self}]: {resources=}")
         # Logged config seems like:
+        # Pre-February 2023
         #[('/service[52ff5f0f-fda4-40bd-a0b1-066f4ff04079:optical]', '{"capacity_unit": "GHz", "capacity_value": 1, "direction": "UNIDIRECTIONAL", "input_sip": "XR HUB 1|XR-T4", "layer_protocol_name": "PHOTONIC_MEDIA", "layer_protocol_qualifier": "tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC", "output_sip": "XR LEAF 1|XR-T1", "uuid": "52ff5f0f-fda4-40bd-a0b1-066f4ff04079:optical"}')]
-
+        # Post February 2023
+        #[('/services/service[e1b9184c-767d-44b9-bf83-a1f643d82bef]', '{"capacity_unit": "GHz", "capacity_value": 50.0, "direction": "UNIDIRECTIONAL", "input_sip": "XR LEAF 1|XR-T1", "layer_protocol_name": "PHOTONIC_MEDIA", "layer_protocol_qualifier": "tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC", "output_sip": "XR HUB 1|XR-T4", "uuid": "e1b9184c-767d-44b9-bf83-a1f643d82bef"}')]
         with self.__lock:
             if self.__constellation is None:
                 self.__constellation = self.__cm_connection.get_constellation_by_hub_name(self.__hub_module_name)
@@ -157,7 +159,7 @@ class XrDriver(_Driver):
                         else:
                             LOGGER.info(f"DeleteConfig: Connection {service_uuid} delete failure (was {str(connection)})")
 
-                        if self.__constellation.is_vti_mode():
+                        if connection.is_vti_mode():
                             active_tc = self.__cm_connection.get_transport_capacity_by_teraflow_uuid(service_uuid)
                             if active_tc is not None:
                                 if self.__cm_connection.delete_transport_capacity(active_tc.href):
diff --git a/src/device/service/drivers/xr/cm-cli.py b/src/device/service/drivers/xr/cm-cli.py
old mode 100644
new mode 100755
diff --git a/src/device/service/drivers/xr/cm/cm_connection.py b/src/device/service/drivers/xr/cm/cm_connection.py
index 8ee9ee236..712849451 100644
--- a/src/device/service/drivers/xr/cm/cm_connection.py
+++ b/src/device/service/drivers/xr/cm/cm_connection.py
@@ -241,7 +241,7 @@ class CmConnection:
         return self.__acquire_access_token()
 
     def list_constellations(self) -> List[Constellation]:
-        r = self.__get("/api/v1/ns/xr-networks?content=expanded")
+        r = self.__get("/api/v1/xr-networks?content=expanded")
         if not r.is_valid_json_list_with_status(200):
             return []
         return [Constellation(c) for c in r.json]
@@ -252,13 +252,13 @@ class CmConnection:
             ('content', 'expanded'),
             ('q', '{"hubModule.state.module.moduleName": "' + hub_module_name + '"}')
         ]
-        r = self.__get("/api/v1/ns/xr-networks?content=expanded", params=qparams)
+        r = self.__get("/api/v1/xr-networks?content=expanded", params=qparams)
         if not r.is_valid_json_list_with_status(200, 1, 1):
             return None
         return Constellation(r.json[0])
 
     def get_transport_capacities(self) -> List[TransportCapacity]:
-        r= self.__get("/api/v1/ns/transport-capacities?content=expanded")
+        r= self.__get("/api/v1/transport-capacities?content=expanded")
         if not r.is_valid_json_list_with_status(200):
             return []
         return [TransportCapacity(from_json=t) for t in r.json]
@@ -268,7 +268,7 @@ class CmConnection:
             ('content', 'expanded'),
             ('q', '{"state.name": "' + tc_name + '"}')
         ]
-        r = self.__get("/api/v1/ns/transport-capacities?content=expanded", params=qparams)
+        r = self.__get("/api/v1/transport-capacities?content=expanded", params=qparams)
         if not r.is_valid_json_list_with_status(200, 1, 1):
             return TransportCapacity(from_json=r.json[0])
         else:
@@ -280,17 +280,17 @@ class CmConnection:
     def create_transport_capacity(self, tc: TransportCapacity) -> Optional[str]:
         # Create wants a list, so wrap connection to list
         tc_config = [tc.create_config()]
-        resp = self.__post("/api/v1/ns/transport-capacities", tc_config)
+        resp = self.__post("/api/v1/transport-capacities", tc_config)
         if resp.is_valid_json_list_with_status(202, 1, 1) and "href" in resp.json[0]:
             tc.href = resp.json[0]["href"]
             LOGGER.info(f"Created transport-capcity {tc}")
-            #LOGGER.info(self.__get(f"/api/v1/ns/transport-capacities{tc.href}?content=expanded"))
+            #LOGGER.info(self.__get(f"/api/v1/transport-capacities{tc.href}?content=expanded"))
             return tc.href
         else:
             return None
 
     def delete_transport_capacity(self, href: str) -> bool:
-        resp = self.__delete(f"/api/v1/ns/transport-capacities{href}")
+        resp = self.__delete(f"/api/v1/transport-capacities{href}")
 
         # Returns empty body
         if resp.is_valid_with_status_ignore_body(202):
@@ -399,7 +399,7 @@ class CmConnection:
         # Create wants a list, so wrap connection to list
         cfg = [connection.create_config()]
 
-        resp = self.__post("/api/v1/ncs/network-connections", cfg)
+        resp = self.__post("/api/v1/network-connections", cfg)
         if resp.is_valid_json_list_with_status(202, 1, 1) and "href" in resp.json[0]:
             connection.href = resp.json[0]["href"]
             LOGGER.info(f"IPM accepted create request for connection {connection}")
@@ -433,7 +433,7 @@ class CmConnection:
 
         # Perform deletes
         for ep_href in ep_deletes:
-            resp = self.__delete(f"/api/v1/ncs{ep_href}")
+            resp = self.__delete(f"/api/v1{ep_href}")
             if resp.is_valid_with_status_ignore_body(202):
                 LOGGER.info(f"update_connection: EP-UPDATE: Deleted connection endpoint {ep_href}")
             else:
@@ -441,21 +441,21 @@ class CmConnection:
 
         # Update capacities for otherwise similar endpoints
         for ep_href, ep_cfg in ep_updates:
-            resp = self.__put(f"/api/v1/ncs{ep_href}", ep_cfg)
+            resp = self.__put(f"/api/v1{ep_href}", ep_cfg)
             if resp.is_valid_with_status_ignore_body(202):
                 LOGGER.info(f"update_connection: EP-UPDATE: Updated connection endpoint {ep_href} with {ep_cfg}")
             else:
                 LOGGER.info(f"update_connection: EP-UPDATE: Failed to update connection endpoint {ep_href} with {ep_cfg}: {resp}")
 
         # Perform adds
-        resp = self.__post(f"/api/v1/ncs{href}/endpoints", ep_creates)
+        resp = self.__post(f"/api/v1{href}/endpoints", ep_creates)
         if resp.is_valid_json_list_with_status(202, 1, 1) and "href" in resp.json[0]:
             LOGGER.info(f"update_connection: EP-UPDATE: Created connection endpoints {resp.json[0]} with {ep_creates}")
         else:
             LOGGER.info(f"update_connection: EP-UPDATE: Failed to create connection endpoints {resp.json[0] if resp.json else None} with {ep_creates}: {resp}")
 
         # Connection update (excluding endpoints)
-        resp = self.__put(f"/api/v1/ncs{href}", cfg)
+        resp = self.__put(f"/api/v1{href}", cfg)
         # Returns empty body
         if resp.is_valid_with_status_ignore_body(202):
             LOGGER.info(f"update_connection: Updated connection {connection}")
@@ -466,7 +466,7 @@ class CmConnection:
             return None
 
     def delete_connection(self, href: str) -> bool:
-        resp = self.__delete(f"/api/v1/ncs{href}")
+        resp = self.__delete(f"/api/v1{href}")
         #print(resp)
         # Returns empty body
         if resp.is_valid_with_status_ignore_body(202):
@@ -489,7 +489,7 @@ class CmConnection:
             ('content', 'expanded'),
             ('q', '{"state.name": "' + connection_name + '"}')
         ]
-        r = self.__get("/api/v1/ncs/network-connections", params=qparams)
+        r = self.__get("/api/v1/network-connections", params=qparams)
         if r.is_valid_json_list_with_status(200, 1, 1):
             return Connection(from_json=r.json[0])
         else:
@@ -499,7 +499,7 @@ class CmConnection:
         qparams = [
             ('content', 'expanded'),
         ]
-        r = self.__get(f"/api/v1/ncs{href}", params=qparams)
+        r = self.__get(f"/api/v1{href}", params=qparams)
         if r.is_valid_json_obj_with_status(200):
             return Connection(from_json=r.json)
         else:
@@ -509,14 +509,14 @@ class CmConnection:
         return self.get_connection_by_name(f"TF:{uuid}")
 
     def get_connections(self):
-        r = self.__get("/api/v1/ncs/network-connections?content=expanded")
+        r = self.__get("/api/v1/network-connections?content=expanded")
         if r.is_valid_json_list_with_status(200):
             return [Connection(from_json=c) for c in r.json]
         else:
             return []
 
     def service_uuid(self, key: str) -> Optional[str]:
-        service = re.match(r"^/service\[(.+)\]$", key)
+        service = re.match(r"^(?:/services)/service\[(.+)\]$", key)
         if service:
             return service.group(1)
         else:
diff --git a/src/device/service/drivers/xr/cm/connection.py b/src/device/service/drivers/xr/cm/connection.py
index 98736cce5..321922b1c 100644
--- a/src/device/service/drivers/xr/cm/connection.py
+++ b/src/device/service/drivers/xr/cm/connection.py
@@ -165,6 +165,9 @@ class Connection:
         endpoints = ", ".join((str(ep) for ep in self.endpoints))
         return f"name: {name}, id: {self.href}, service-mode: {self.serviceMode}, end-points: [{endpoints}]"
 
+    def is_vti_mode(self) -> bool:
+        return "XR-VTI-P2P" == self.serviceMode
+
     def __guess_service_mode_from_emulated_enpoints(self):
         for ep in self.endpoints:
             if ep.vlan is not None:
diff --git a/src/device/service/drivers/xr/cm/tests/test_cm_connection.py b/src/device/service/drivers/xr/cm/tests/test_cm_connection.py
index 4f45be686..a7944ed22 100644
--- a/src/device/service/drivers/xr/cm/tests/test_cm_connection.py
+++ b/src/device/service/drivers/xr/cm/tests/test_cm_connection.py
@@ -59,7 +59,7 @@ def test_cmc_connect():
 
 def test_cmc_get_constellations():
     with mock_cm_connectivity() as m:
-        m.get("https://127.0.0.1:9999/api/v1/ns/xr-networks?content=expanded", text=res_constellations)
+        m.get("https://127.0.0.1:9999/api/v1/xr-networks?content=expanded", text=res_constellations)
         cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False)
         assert cm.Connect()
 
@@ -73,7 +73,7 @@ def test_cmc_get_constellations():
                             ['XR HUB 1|XR-T1', 'XR HUB 1|XR-T2', 'XR HUB 1|XR-T3', 'XR HUB 1|XR-T4', 'XR LEAF 1|XR-T1', 'XR LEAF 2|XR-T1']]
 
         # Get constellation by hub module name
-        m.get("https://127.0.0.1:9999/api/v1/ns/xr-networks?content=expanded&content=expanded&q=%7B%22hubModule.state.module.moduleName%22%3A+%22XR+HUB+1%22%7D", text=res_constellation_by_name_hub1)
+        m.get("https://127.0.0.1:9999/api/v1/xr-networks?content=expanded&content=expanded&q=%7B%22hubModule.state.module.moduleName%22%3A+%22XR+HUB+1%22%7D", text=res_constellation_by_name_hub1)
         constellation = cm.get_constellation_by_hub_name("XR HUB 1")
         assert constellation
         assert constellation.ifnames() == ['XR HUB 1|XR-T1', 'XR HUB 1|XR-T2', 'XR HUB 1|XR-T3', 'XR HUB 1|XR-T4', 'XR LEAF 1|XR-T1', 'XR LEAF 2|XR-T1']
diff --git a/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py b/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py
index 3bfd63def..e9b16b620 100644
--- a/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py
+++ b/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py
@@ -38,8 +38,8 @@ with open(os.path.join(resources, "connections-expanded.json"), "r", encoding="U
 def mock_cm():
     m = requests_mock.Mocker()
     m.post('https://127.0.0.1:9999/realms/xr-cm/protocol/openid-connect/token', text=access_token)
-    m.get("https://127.0.0.1:9999/api/v1/ns/xr-networks?content=expanded&content=expanded&q=%7B%22hubModule.state.module.moduleName%22%3A+%22XR+HUB+1%22%7D", text=res_constellation_by_name_hub1)
-    m.post("https://127.0.0.1:9999/api/v1/ncs/network-connections", text='[{"href":"/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432","rt":["cm.network-connection"]}]', status_code=202)
+    m.get("https://127.0.0.1:9999/api/v1/xr-networks?content=expanded&content=expanded&q=%7B%22hubModule.state.module.moduleName%22%3A+%22XR+HUB+1%22%7D", text=res_constellation_by_name_hub1)
+    m.post("https://127.0.0.1:9999/api/v1/network-connections", text='[{"href":"/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432","rt":["cm.network-connection"]}]', status_code=202)
     return m
 
 uuid = "12345ABCDEFGHIJKLMN"
@@ -69,9 +69,9 @@ def test_xr_set_config():
         called_mocks = [(r._request.method, r._request.url) for r in m._adapter.request_history]
         expected_mocks = [
             ('POST', 'https://127.0.0.1:9999/realms/xr-cm/protocol/openid-connect/token'), # Authentication
-            ('GET',  'https://127.0.0.1:9999/api/v1/ns/xr-networks?content=expanded&content=expanded&q=%7B%22hubModule.state.module.moduleName%22%3A+%22XR+HUB+1%22%7D'),  # Hub module by name
-            ('GET',  'https://127.0.0.1:9999/api/v1/ncs/network-connections?content=expanded&q=%7B%22state.name%22%3A+%22TF%3A12345ABCDEFGHIJKLMN%22%7D'),  # Get by name, determine update or create
-            ('POST', 'https://127.0.0.1:9999/api/v1/ncs/network-connections') # Create
+            ('GET',  'https://127.0.0.1:9999/api/v1/xr-networks?content=expanded&content=expanded&q=%7B%22hubModule.state.module.moduleName%22%3A+%22XR+HUB+1%22%7D'),  # Hub module by name
+            ('GET',  'https://127.0.0.1:9999/api/v1/network-connections?content=expanded&q=%7B%22state.name%22%3A+%22TF%3A12345ABCDEFGHIJKLMN%22%7D'),  # Get by name, determine update or create
+            ('POST', 'https://127.0.0.1:9999/api/v1/network-connections') # Create
         ]
         assert called_mocks == expected_mocks
 
@@ -97,7 +97,7 @@ def test_xr_set_config_consistency_lifecycle():
         json_non_terminal = copy.deepcopy(json_terminal)
         json_non_terminal["state"]["lifecycleState"] = "pendingConfiguration"
         # We go trough 404 and non-terminal lstate first and then terminal state.
-        m.get("https://127.0.0.1:9999/api/v1/ncs/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432",
+        m.get("https://127.0.0.1:9999/api/v1/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432",
               [{'text': '', 'status_code': 404},
                { 'json': json_non_terminal, 'status_code': 200 },
                {'json': json_terminal, 'status_code': 200  }])
@@ -108,19 +108,19 @@ def test_xr_set_config_consistency_lifecycle():
         called_mocks = [(r._request.method, r._request.url) for r in m._adapter.request_history]
         expected_mocks = [
             ('POST', 'https://127.0.0.1:9999/realms/xr-cm/protocol/openid-connect/token'), # Authentication
-            ('GET',  'https://127.0.0.1:9999/api/v1/ns/xr-networks?content=expanded&content=expanded&q=%7B%22hubModule.state.module.moduleName%22%3A+%22XR+HUB+1%22%7D'),  # Hub module by name
-            ('GET',  'https://127.0.0.1:9999/api/v1/ncs/network-connections?content=expanded&q=%7B%22state.name%22%3A+%22TF%3A12345ABCDEFGHIJKLMN%22%7D'),  # Get by name, determine update or create
-            ('POST', 'https://127.0.0.1:9999/api/v1/ncs/network-connections'), # Create
-            ('GET',  'https://127.0.0.1:9999/api/v1/ncs/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432?content=expanded'), # Life cycle state check --> no REST API object
-            ('GET',  'https://127.0.0.1:9999/api/v1/ncs/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432?content=expanded'), # Life cycle state check --> non-terminal
-            ('GET',  'https://127.0.0.1:9999/api/v1/ncs/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432?content=expanded') # Life cycle state check --> terminal
+            ('GET',  'https://127.0.0.1:9999/api/v1/xr-networks?content=expanded&content=expanded&q=%7B%22hubModule.state.module.moduleName%22%3A+%22XR+HUB+1%22%7D'),  # Hub module by name
+            ('GET',  'https://127.0.0.1:9999/api/v1/network-connections?content=expanded&q=%7B%22state.name%22%3A+%22TF%3A12345ABCDEFGHIJKLMN%22%7D'),  # Get by name, determine update or create
+            ('POST', 'https://127.0.0.1:9999/api/v1/network-connections'), # Create
+            ('GET',  'https://127.0.0.1:9999/api/v1/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432?content=expanded'), # Life cycle state check --> no REST API object
+            ('GET',  'https://127.0.0.1:9999/api/v1/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432?content=expanded'), # Life cycle state check --> non-terminal
+            ('GET',  'https://127.0.0.1:9999/api/v1/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432?content=expanded') # Life cycle state check --> terminal
         ]
         assert called_mocks == expected_mocks
 
         ################################################################################
         # Same as before, but without life cycle progress
         m.reset_mock()
-        m.get("https://127.0.0.1:9999/api/v1/ncs/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432",
+        m.get("https://127.0.0.1:9999/api/v1/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432",
               [{'text': '', 'status_code': 401},
                { 'json': json_non_terminal, 'status_code': 200 }])
 
@@ -129,10 +129,10 @@ def test_xr_set_config_consistency_lifecycle():
 
         called_mocks = [(r._request.method, r._request.url) for r in m._adapter.request_history]
         expected_mocks_no_connect = [
-            ('GET',  'https://127.0.0.1:9999/api/v1/ncs/network-connections?content=expanded&q=%7B%22state.name%22%3A+%22TF%3A12345ABCDEFGHIJKLMN%22%7D'),  # Get by name, determine update or create
-            ('POST', 'https://127.0.0.1:9999/api/v1/ncs/network-connections'), # Create
-            ('GET',  'https://127.0.0.1:9999/api/v1/ncs/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432?content=expanded'), # Life cycle state check --> no REST API object
-            ('GET',  'https://127.0.0.1:9999/api/v1/ncs/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432?content=expanded'), # Life cycle state check --> non-terminal
+            ('GET',  'https://127.0.0.1:9999/api/v1/network-connections?content=expanded&q=%7B%22state.name%22%3A+%22TF%3A12345ABCDEFGHIJKLMN%22%7D'),  # Get by name, determine update or create
+            ('POST', 'https://127.0.0.1:9999/api/v1/network-connections'), # Create
+            ('GET',  'https://127.0.0.1:9999/api/v1/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432?content=expanded'), # Life cycle state check --> no REST API object
+            ('GET',  'https://127.0.0.1:9999/api/v1/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432?content=expanded'), # Life cycle state check --> non-terminal
         ]
         assert called_mocks == repeat_last_expected(expected_mocks_no_connect, called_mocks)
 
@@ -143,7 +143,7 @@ def test_xr_set_config_consistency_lifecycle():
         assert cm.Connect()
         constellation = cm.get_constellation_by_hub_name("XR HUB 1")
         assert constellation
-        m.get("https://127.0.0.1:9999/api/v1/ncs/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432",
+        m.get("https://127.0.0.1:9999/api/v1/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432",
               [{'text': '', 'status_code': 401},
                { 'json': json_non_terminal, 'status_code': 200 }])
         result = set_config_for_service(cm, constellation, uuid, config)
@@ -158,7 +158,7 @@ def test_xr_set_config_consistency_lifecycle():
         assert cm.Connect()
         constellation = cm.get_constellation_by_hub_name("XR HUB 1")
         assert constellation
-        m.get("https://127.0.0.1:9999/api/v1/ncs/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432",
+        m.get("https://127.0.0.1:9999/api/v1/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432",
               [{'text': '', 'status_code': 401}])
         result = set_config_for_service(cm, constellation, uuid, config)
         _validate_result(result, False)
@@ -175,15 +175,15 @@ def test_xr_set_config_update_case():
         assert constellation
 
         # Fake existing service (--> update path is taken)
-        m.get("https://127.0.0.1:9999/api/v1/ncs/network-connections?content=expanded&q=%7B%22state.name%22%3A+%22TF%3A12345ABCDEFGHIJKLMN%22%7D", json=res_connection_by_name_json)
+        m.get("https://127.0.0.1:9999/api/v1/network-connections?content=expanded&q=%7B%22state.name%22%3A+%22TF%3A12345ABCDEFGHIJKLMN%22%7D", json=res_connection_by_name_json)
         # Delete endpoint that is no longer necessary
-        m.delete("https://127.0.0.1:9999/api/v1/ncs/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints/1d58ba8f-4d51-4213-83e1-97a0e0bdd388", text="", status_code = 202)
+        m.delete("https://127.0.0.1:9999/api/v1/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints/1d58ba8f-4d51-4213-83e1-97a0e0bdd388", text="", status_code = 202)
         # Update changed endpoint
-        m.put("https://127.0.0.1:9999/api/v1/ncs/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints/230516d0-7e38-44b1-b174-1ba7d4454ee6", text="", status_code = 202)
+        m.put("https://127.0.0.1:9999/api/v1/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints/230516d0-7e38-44b1-b174-1ba7d4454ee6", text="", status_code = 202)
         # Create the newly added endpoint
-        m.post("https://127.0.0.1:9999/api/v1/ncs/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints", json=[{"href":"/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoint/somethingplausible","rt":["plausible"]}], status_code=202)
+        m.post("https://127.0.0.1:9999/api/v1/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints", json=[{"href":"/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoint/somethingplausible","rt":["plausible"]}], status_code=202)
         # Update the connection itself
-        m.put("https://127.0.0.1:9999/api/v1/ncs/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03", text="", status_code=202)
+        m.put("https://127.0.0.1:9999/api/v1/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03", text="", status_code=202)
 
         result = set_config_for_service(cm, constellation, uuid, config)
         _validate_result(result, True)
@@ -191,11 +191,11 @@ def test_xr_set_config_update_case():
         called_mocks = [(r._request.method, r._request.url) for r in m._adapter.request_history]
         expected_mocks = [
             ('POST',   'https://127.0.0.1:9999/realms/xr-cm/protocol/openid-connect/token'), # Authentication
-            ('GET',    'https://127.0.0.1:9999/api/v1/ns/xr-networks?content=expanded&content=expanded&q=%7B%22hubModule.state.module.moduleName%22%3A+%22XR+HUB+1%22%7D'),  # Hub module by name
-            ('GET',    'https://127.0.0.1:9999/api/v1/ncs/network-connections?content=expanded&q=%7B%22state.name%22%3A+%22TF%3A12345ABCDEFGHIJKLMN%22%7D'),  # Get by name, determine update or create
-            ('DELETE', 'https://127.0.0.1:9999/api/v1/ncs/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints/1d58ba8f-4d51-4213-83e1-97a0e0bdd388'), # Delete unnecessary endpoint
-            ('PUT',    'https://127.0.0.1:9999/api/v1/ncs/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints/230516d0-7e38-44b1-b174-1ba7d4454ee6'), # Update changed endpoint
-            ('POST',   'https://127.0.0.1:9999/api/v1/ncs/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints'), # Add new endpoint
-            ('PUT',    'https://127.0.0.1:9999/api/v1/ncs/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03') # Update the connection itself
+            ('GET',    'https://127.0.0.1:9999/api/v1/xr-networks?content=expanded&content=expanded&q=%7B%22hubModule.state.module.moduleName%22%3A+%22XR+HUB+1%22%7D'),  # Hub module by name
+            ('GET',    'https://127.0.0.1:9999/api/v1/network-connections?content=expanded&q=%7B%22state.name%22%3A+%22TF%3A12345ABCDEFGHIJKLMN%22%7D'),  # Get by name, determine update or create
+            ('DELETE', 'https://127.0.0.1:9999/api/v1/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints/1d58ba8f-4d51-4213-83e1-97a0e0bdd388'), # Delete unnecessary endpoint
+            ('PUT',    'https://127.0.0.1:9999/api/v1/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints/230516d0-7e38-44b1-b174-1ba7d4454ee6'), # Update changed endpoint
+            ('POST',   'https://127.0.0.1:9999/api/v1/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03/endpoints'), # Add new endpoint
+            ('PUT',    'https://127.0.0.1:9999/api/v1/network-connections/4505d5d3-b2f3-40b8-8ec2-4a5b28523c03') # Update the connection itself
         ]
         assert called_mocks == expected_mocks
-- 
GitLab


From 93009a5da00d3dbde9b6515a202879039f543ad1 Mon Sep 17 00:00:00 2001
From: cherifi <hakim.cherifi@telenor.com>
Date: Wed, 8 Feb 2023 09:51:32 +0000
Subject: [PATCH 028/229] Update deploy_all.sh

---
 src/tests/scenario2/deploy_all.sh | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/tests/scenario2/deploy_all.sh b/src/tests/scenario2/deploy_all.sh
index 19ea0e6db..541612db4 100755
--- a/src/tests/scenario2/deploy_all.sh
+++ b/src/tests/scenario2/deploy_all.sh
@@ -37,20 +37,20 @@ kubectl apply -f nfvsdn22/nginx-ingress-controller-dom4.yaml
 
 # Deploy TFS for Domain 1
 source nfvsdn22/deploy_specs_dom1.sh
-./deploy.sh
+./deploy/all.sh
 mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom1.sh
 
 # Deploy TFS for Domain 2
 source nfvsdn22/deploy_specs_dom2.sh
-./deploy.sh
+./deploy/all.sh
 mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom2.sh
 
 # Deploy TFS for Domain 3
 source nfvsdn22/deploy_specs_dom3.sh
-./deploy.sh
+./deploy/all.sh
 mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom3.sh
 
 # Deploy TFS for Domain 4
 source nfvsdn22/deploy_specs_dom4.sh
-./deploy.sh
+./deploy/all.sh
 mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom4.sh
-- 
GitLab


From 140f654f91f414c5323a022f8ff660654cd8cc09 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 8 Feb 2023 13:10:38 +0000
Subject: [PATCH 029/229] Manifests:

- enabled DEBUG logging for device and service
---
 manifests/deviceservice.yaml  | 2 +-
 manifests/serviceservice.yaml | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/manifests/deviceservice.yaml b/manifests/deviceservice.yaml
index ca2c81f0f..ddcc997cd 100644
--- a/manifests/deviceservice.yaml
+++ b/manifests/deviceservice.yaml
@@ -36,7 +36,7 @@ spec:
         - containerPort: 9192
         env:
         - name: LOG_LEVEL
-          value: "INFO"
+          value: "DEBUG"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:2020"]
diff --git a/manifests/serviceservice.yaml b/manifests/serviceservice.yaml
index 3fa4a6e0d..801c06f52 100644
--- a/manifests/serviceservice.yaml
+++ b/manifests/serviceservice.yaml
@@ -36,7 +36,7 @@ spec:
         - containerPort: 9192
         env:
         - name: LOG_LEVEL
-          value: "INFO"
+          value: "DEBUG"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:3030"]
-- 
GitLab


From e7e34ba20713db3f44bcfb006752819fb406e09e Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Wed, 8 Feb 2023 19:03:42 +0100
Subject: [PATCH 030/229] TODO tested

---
 .../l3nm_openconfig/ConfigRules.py            | 76 ++++++++-----------
 1 file changed, 30 insertions(+), 46 deletions(-)

diff --git a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
index 0309c17d7..2e6224a67 100644
--- a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
@@ -82,14 +82,14 @@ def setup_config_rules(
                 'protocol_name': 'DIRECTLY_CONNECTED',
         }),
 
-        # TODO: TO BE TESTED (TID)
-        ##Add STATIC protocol to network instance
-        #json_config_rule_set(
-        #    '/network_instance[{:s}]/protocols[STATIC]'.format(network_instance_name), {
-        #        'name': network_instance_name, 
-        #        'identifier': 'STATIC', 
-        #        'protocol_name': 'STATIC',
-        #}),
+        
+        #Add STATIC protocol to network instance
+        json_config_rule_set(
+            '/network_instance[{:s}]/protocols[STATIC]'.format(network_instance_name), {
+                'name': network_instance_name, 
+                'identifier': 'STATIC', 
+                'protocol_name': 'STATIC',
+        }),
 
         #Create interface with subinterface
         json_config_rule_set(
@@ -167,15 +167,14 @@ def setup_config_rules(
                 'default_import_policy': 'ACCEPT_ROUTE',
         }),
 
-        # TODO: TO BE TESTED (TID)
-        #json_config_rule_set(
-        #    '/network_instance[{:s}]/table_connections[STATIC][BGP][IPV4]'.format(network_instance_name), {
-        #        'name'                 : network_instance_name,
-        #        'src_protocol'         : 'STATIC',
-        #        'dst_protocol'         : 'BGP',
-        #        'address_family'       : 'IPV4',
-        #        'default_import_policy': 'ACCEPT_ROUTE',
-        #}),
+        json_config_rule_set(
+            '/network_instance[{:s}]/table_connections[STATIC][BGP][IPV4]'.format(network_instance_name), {
+                'name'                 : network_instance_name,
+                'src_protocol'         : 'STATIC',
+                'dst_protocol'         : 'BGP',
+                'address_family'       : 'IPV4',
+                'default_import_policy': 'ACCEPT_ROUTE',
+        }),
 
     ]
     return json_config_rules
@@ -220,51 +219,36 @@ def teardown_config_rules(
                 'address_family': 'IPV4', 
         }),
 
-        # TODO: TO BE TESTED (TID)
-        #json_config_rule_delete(
-        #    '/network_instance[{:s}]/table_connections[STATIC][BGP][IPV4]'.format(network_instance_name), {
-        #        'name'          : network_instance_name,
-        #        'src_protocol'  : 'STATIC',
-        #        'dst_protocol'  : 'BGP',
-        #        'address_family': 'IPV4',
-        #}),
+        
+        json_config_rule_delete(
+            '/network_instance[{:s}]/table_connections[STATIC][BGP][IPV4]'.format(network_instance_name), {
+                'name'          : network_instance_name,
+                'src_protocol'  : 'STATIC',
+                'dst_protocol'  : 'BGP',
+                'address_family': 'IPV4',
+        }),
 
         #Delete export routing policy 
+
         json_config_rule_delete(
-            # pylint: disable=duplicate-string-formatting-argument
-            '/routing_policy/policy_definition[{:s}_export]/statement[{:s}]'.format(policy_export, policy_export), {
-                'policy_name': policy_export,
+            '/routing_policy/policy_definition[{:s}_export]'.format(network_instance_name), {
+                'policy_name': '{:s}_export'.format(network_instance_name),
         }),
-        # TODO: TO BE TESTED IF IT IS ENOUGH ERASING "/routing_policy/policy_definition[{:s}_export]"
-        #json_config_rule_delete(
-        #    '/routing_policy/policy_definition[{:s}_export]'.format(network_instance_name), {
-        #        'policy_name': '{:s}_export'.format(network_instance_name),
-        #}),
         json_config_rule_delete(
             '/routing_policy/bgp_defined_set[{:s}_rt_export][{:s}]'.format(policy_export, route_distinguisher), {
                 'ext_community_set_name': 'set_{:s}'.format(policy_export),
         }),
 
         #Delete import routing policy 
+
         json_config_rule_delete(
-            # pylint: disable=duplicate-string-formatting-argument
-            '/routing_policy/policy_definition[{:s}_import]/statement[{:s}]'.format(policy_import, policy_import), {
-                'policy_name': policy_import,
+            '/routing_policy/policy_definition[{:s}_import]'.format(network_instance_name), {
+                'policy_name': '{:s}_import'.format(network_instance_name),
         }),
-        # TODO: TO BE TESTED IF IT IS ENOUGH ERASING "/routing_policy/policy_definition[{:s}_import]"
-        #json_config_rule_delete(
-        #    '/routing_policy/policy_definition[{:s}_import]'.format(network_instance_name), {
-        #        'policy_name': '{:s}_import'.format(network_instance_name),
-        #}),
         json_config_rule_delete(
             '/routing_policy/bgp_defined_set[{:s}_rt_import][{:s}]'.format(policy_import, route_distinguisher), {
                 'ext_community_set_name': 'set_{:s}'.format(policy_import),
         }),
-        # TODO: TO BE TESTED IF IT IS NEEDED
-        #json_config_rule_delete(
-        #    '/routing_policy/bgp_defined_set[{:s}_rt_import]'.format(network_instance_name), {
-        #        'ext_community_set_name': '{:s}_rt_import'.format(network_instance_name),
-        #}),
 
         #Delete interface; automatically deletes:
         # - /interface[]/subinterface[]
-- 
GitLab


From b851152b92a12ae0e45179cc7604940acdf70d6c Mon Sep 17 00:00:00 2001
From: Ville Hallivuori <VHallivuori@infinera.com>
Date: Thu, 9 Feb 2023 09:11:07 +0200
Subject: [PATCH 031/229] Clean up XR emulation json

---
 src/tests/ofc22/descriptors_emulated_xr.json | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/tests/ofc22/descriptors_emulated_xr.json b/src/tests/ofc22/descriptors_emulated_xr.json
index d6a2f0234..4e247bb30 100644
--- a/src/tests/ofc22/descriptors_emulated_xr.json
+++ b/src/tests/ofc22/descriptors_emulated_xr.json
@@ -31,7 +31,10 @@
             "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}}
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"uuid": "13/0/0", "type": "optical", "sample_types": []},
+                    {"uuid": "13/1/2", "type": "copper",  "sample_types": [101, 102, 201, 202]}
+                ]}}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [0],
@@ -43,7 +46,10 @@
             "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}}
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"uuid": "13/0/0", "type": "optical", "sample_types": []},
+                    {"uuid": "13/1/2", "type": "copper",  "sample_types": [101, 102, 201, 202]}
+                ]}}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [0],
@@ -55,7 +61,10 @@
             "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}}
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"uuid": "13/0/0", "type": "optical", "sample_types": []},
+                    {"uuid": "13/1/2", "type": "copper",  "sample_types": [101, 102, 201, 202]}
+                ]}}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [0],
@@ -67,7 +76,10 @@
             "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"endpoints\": [{\"sample_types\": [], \"type\": \"optical\", \"uuid\": \"13/0/0\"}, {\"sample_types\": [101, 102, 201, 202], \"type\": \"copper\", \"uuid\": \"13/1/2\"}]}"}}
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"uuid": "13/0/0", "type": "optical", "sample_types": []},
+                    {"uuid": "13/1/2", "type": "copper",  "sample_types": [101, 102, 201, 202]}
+                ]}}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [0],
-- 
GitLab


From fc618f658a5d5cde078fb0bbfb21b2face48c510 Mon Sep 17 00:00:00 2001
From: Panagiotis Famelis <pfamelis@ubitech.eu>
Date: Wed, 8 Feb 2023 16:27:03 +0200
Subject: [PATCH 032/229] fix: Change p4_service_handler and test scripts for
 rel2

---
 .../service_handlers/p4/p4_service_handler.py | 27 +++++++++++----
 .../p4/tests/test_functional_bootstrap.py     | 24 +++++++++++---
 .../tests/test_functional_create_service.py   | 33 ++++---------------
 .../tests/test_functional_delete_service.py   |  7 ----
 4 files changed, 47 insertions(+), 44 deletions(-)

diff --git a/src/service/service/service_handlers/p4/p4_service_handler.py b/src/service/service/service_handlers/p4/p4_service_handler.py
index 500c50378..b068e0776 100644
--- a/src/service/service/service_handlers/p4/p4_service_handler.py
+++ b/src/service/service/service_handlers/p4/p4_service_handler.py
@@ -47,7 +47,7 @@ def create_rule_set(endpoint_a, endpoint_b):
                 }
             ]
         }
-)
+    )
 
 def create_rule_del(endpoint_a, endpoint_b):
     return json_config_rule_delete(
@@ -68,7 +68,16 @@ def create_rule_del(endpoint_a, endpoint_b):
                 }
             ]
         }
-)
+    )
+
+def find_names(uuid_a, uuid_b, device_endpoints):
+    for endpoint in device_endpoints:
+        if endpoint.endpoint_id.endpoint_uuid.uuid == uuid_a:
+            endpoint_a = endpoint.name
+        elif endpoint.endpoint_id.endpoint_uuid.uuid == uuid_b:
+            endpoint_b = endpoint.name
+            
+    return (endpoint_a, endpoint_b)
 
 class P4ServiceHandler(_ServiceHandler):
     def __init__(self,
@@ -127,12 +136,15 @@ class P4ServiceHandler(_ServiceHandler):
                     device = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
 
                     del device.device_config.config_rules[:]
+                    
+                    # Find names from uuids
+                    (endpoint_a, endpoint_b) = find_names(matched_endpoint_uuid, endpoint_uuid, device.device_endpoints)
 
                     # One way
-                    rule = create_rule_set(matched_endpoint_uuid, endpoint_uuid) 
+                    rule = create_rule_set(endpoint_a, endpoint_b) 
                     device.device_config.config_rules.append(ConfigRule(**rule))
                     # The other way
-                    rule = create_rule_set(endpoint_uuid, matched_endpoint_uuid) 
+                    rule = create_rule_set(endpoint_b, endpoint_a) 
                     device.device_config.config_rules.append(ConfigRule(**rule))
 
                     self.__task_executor.configure_device(device)
@@ -189,11 +201,14 @@ class P4ServiceHandler(_ServiceHandler):
 
                     del device.device_config.config_rules[:]
 
+                    # Find names from uuids
+                    (endpoint_a, endpoint_b) = find_names(matched_endpoint_uuid, endpoint_uuid, device.device_endpoints)
+
                     # One way
-                    rule = create_rule_del(matched_endpoint_uuid, endpoint_uuid) 
+                    rule = create_rule_del(endpoint_a, endpoint_b) 
                     device.device_config.config_rules.append(ConfigRule(**rule))
                     # The other way
-                    rule = create_rule_del(endpoint_uuid, matched_endpoint_uuid) 
+                    rule = create_rule_del(endpoint_b, endpoint_a) 
                     device.device_config.config_rules.append(ConfigRule(**rule))
 
                     self.__task_executor.configure_device(device)
diff --git a/src/tests/p4/tests/test_functional_bootstrap.py b/src/tests/p4/tests/test_functional_bootstrap.py
index 11b24adf1..c2a2837ab 100644
--- a/src/tests/p4/tests/test_functional_bootstrap.py
+++ b/src/tests/p4/tests/test_functional_bootstrap.py
@@ -25,6 +25,10 @@ from common.proto.context_pb2 import ConfigActionEnum, Context, ContextId, Devic
 from device.client.DeviceClient import DeviceClient
 from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 
+from common.tools.object_factory.ConfigRule import (
+    json_config_rule_set, json_config_rule_delete)
+
+
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
@@ -48,15 +52,18 @@ def test_prepare_scenario(context_client : ContextClient):  # pylint: disable=re
         context_uuid = context['context_id']['context_uuid']['uuid']
         LOGGER.info('Adding Context {:s}'.format(context_uuid))
         response = context_client.SetContext(Context(**context))
-        assert response.context_uuid.uuid == context_uuid
+        context_data = context_client.GetContext(response)
+        assert context_data.name == context_uuid
 
     for topology in TOPOLOGIES:
         context_uuid = topology['topology_id']['context_id']['context_uuid']['uuid']
         topology_uuid = topology['topology_id']['topology_uuid']['uuid']
         LOGGER.info('Adding Topology {:s}/{:s}'.format(context_uuid, topology_uuid))
         response = context_client.SetTopology(Topology(**topology))
-        assert response.context_id.context_uuid.uuid == context_uuid
-        assert response.topology_uuid.uuid == topology_uuid
+#        assert response.context_id.context_uuid.uuid == context_uuid
+
+        topology_data = context_client.GetTopology(response)
+        assert topology_data.name == topology_uuid
         context_id = json_context_id(context_uuid)
 
 
@@ -81,18 +88,25 @@ def test_devices_bootstraping(
 
         device_p4_with_connect_rules = copy.deepcopy(device)
         device_p4_with_connect_rules['device_config']['config_rules'].extend(connect_rules)
+        device_p4_with_connect_rules['device_operational_status'] = \
+            DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED
         response = device_client.AddDevice(Device(**device_p4_with_connect_rules))
-        assert response.device_uuid.uuid == device_uuid
         
+        LOGGER.info('Adding Device {:s}'.format(device_uuid))
         device_p4_with_endpoints = copy.deepcopy(device)
+        device_p4_with_endpoints['device_id']['device_uuid']['uuid'] = response.device_uuid.uuid
         device_p4_with_endpoints['device_endpoints'].extend(endpoints)
+        for i in device_p4_with_endpoints['device_endpoints']:
+            i['endpoint_id']['device_id']['device_uuid']['uuid'] = response.device_uuid.uuid
+
+        LOGGER.info('Adding Endpoints {:s}'.format(device_uuid))
         device_client.ConfigureDevice(Device(**device_p4_with_endpoints))
 
     for link in LINKS:
         link_uuid = link['link_id']['link_uuid']['uuid']
         LOGGER.info('Adding Link {:s}'.format(link_uuid))
         response = context_client.SetLink(Link(**link))
-        assert response.link_uuid.uuid == link_uuid
+        assert link_uuid == link_uuid
         context_client.SetLink(Link(**link))
 
 def test_devices_bootstrapped(context_client : ContextClient):  # pylint: disable=redefined-outer-name
diff --git a/src/tests/p4/tests/test_functional_create_service.py b/src/tests/p4/tests/test_functional_create_service.py
index f160d3c6f..beaa23ba3 100644
--- a/src/tests/p4/tests/test_functional_create_service.py
+++ b/src/tests/p4/tests/test_functional_create_service.py
@@ -56,12 +56,12 @@ def test_rules_entry(
 
 
 
-    for device, _, __ in DEVICES:
-        # Enable device
-        device_p4_with_operational_status = copy.deepcopy(device)
-        device_p4_with_operational_status['device_operational_status'] = \
-            DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED
-        device_client.ConfigureDevice(Device(**device_p4_with_operational_status))
+#    for device, _, __ in DEVICES:
+#        # Enable device
+#        device_p4_with_operational_status = copy.deepcopy(device)
+#        device_p4_with_operational_status['device_operational_status'] = \
+#            DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED
+#        device_client.ConfigureDevice(Device(**device_p4_with_operational_status))
 
     # ----- Create Services ---------------------------------------------------------------
     for service, endpoints in SERVICES:
@@ -71,23 +71,4 @@ def test_rules_entry(
         service_p4 = copy.deepcopy(service)
         service_client.CreateService(Service(**service_p4))
         service_p4['service_endpoint_ids'].extend(endpoints)
-        service_client.UpdateService(Service(**service_p4))
-
-        
-        
-"""
-con_cl = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
-dev_cl = DeviceClient(get_setting('DEVICESERVICE_SERVICE_HOST'), get_setting('DEVICESERVICE_SERVICE_PORT_GRPC'))
-srv_cl = ServiceClient(get_setting('SERVICESERVICE_SERVICE_HOST'), get_setting('SERVICESERVICE_SERVICE_PORT_GRPC'))
-
-for service, endpoints in SERVICES:
-    service_uuid = service['service_id']['service_uuid']['uuid']
-    print('Creating Service {:s}'.format(service_uuid))
-    service_p4 = copy.deepcopy(service)
-    srv_cl.CreateService(Service(**service_p4))
-    #service_data = con_cl.GetService(ServiceId(**json_service_id('svc1')))
-    #print('service_data = {:s}'.format(grpc_message_to_json_string(service_data)))
-    service_p4 = copy.deepcopy(service)
-    service_p4['service_endpoint_ids'].extend(endpoints)
-    srv_cl.UpdateService(Service(**service_p4))
-"""
\ No newline at end of file
+        service_client.UpdateService(Service(**service_p4))
\ No newline at end of file
diff --git a/src/tests/p4/tests/test_functional_delete_service.py b/src/tests/p4/tests/test_functional_delete_service.py
index 4d637cf88..c5821df4c 100644
--- a/src/tests/p4/tests/test_functional_delete_service.py
+++ b/src/tests/p4/tests/test_functional_delete_service.py
@@ -60,10 +60,3 @@ def test_rules_delete(
         print('Deleting Service {:s}'.format(service_uuid))
         service_p4 = copy.deepcopy(service)
         response = service_client.DeleteService(ServiceId(**json_service_id(service_uuid, CONTEXT_ID)))
-
-    # ----- Disable Devices ---------------------------------------------------------------
-    for device, _, _ in DEVICES:
-        device_p4_with_operational_status = copy.deepcopy(device)
-        device_p4_with_operational_status['device_operational_status'] = \
-            DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED
-        device_client.ConfigureDevice(Device(**device_p4_with_operational_status))
-- 
GitLab


From 223e1cd2a4d88cadb4a241c65bc32c84815ef63e Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 9 Feb 2023 13:53:30 +0000
Subject: [PATCH 033/229] Slice component:

- initial code blocks and details for slice grouping
---
 src/slice/requirements.in         |  3 +-
 src/slice/service/README.md       | 38 +++++++++++++++++++
 src/slice/service/SliceGrouper.py | 61 +++++++++++++++++++++++++++++++
 3 files changed, 101 insertions(+), 1 deletion(-)
 create mode 100644 src/slice/service/README.md
 create mode 100644 src/slice/service/SliceGrouper.py

diff --git a/src/slice/requirements.in b/src/slice/requirements.in
index daef740da..42a96f5a5 100644
--- a/src/slice/requirements.in
+++ b/src/slice/requirements.in
@@ -12,5 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-
 #deepdiff==5.8.*
+numpy==1.23.*
+scikit-learn==1.1.*
diff --git a/src/slice/service/README.md b/src/slice/service/README.md
new file mode 100644
index 000000000..696b4a6e0
--- /dev/null
+++ b/src/slice/service/README.md
@@ -0,0 +1,38 @@
+# SLICE GROUPING details
+
+## Description
+- Similar slice requests can share underlying services.
+- Clustering algorithm for slice grouping.
+- Consider both paths and SLA constraints.
+- SLA monitored by slice group.
+
+## TFS Target Objective
+- Objective 3.2: Provisioning of multi-tenant transport network slices.
+- Improve network resource usage by 30% by adopting multi-tenancy resource allocation algorithms.
+- Optimal slice grouping: trade-offs between economies of scale and limitations as to which SLAs can be grouped together need to be considered.
+- Optimal grouping of slices is required to maximise KPIs, such as resource utilisation, utility of the connectivity, and energy efficiency.
+- In this context, trade-offs between the resulting control plane complexity and differential treatment of SLA classes should be considered.
+
+## New Requirements
+- User can select if slice grouping is performed per-slice request.
+- Slice grouping introduces a clustering algorithm for finding service optimisation while preserving slice SLA.
+- Service (re-)optimisation is provided.
+
+## TFS Architecture Update
+- Update Slice service RPC to include Slice Grouping.
+- Use novel Slice model with SLA constraints.
+- Use Policy Component with action to update services to apply slice grouping.
+- Describe Slice service operation modes: per-request or user-triggered.
+
+    OSS/BSS --> Slice   : Create Slice with SLA (slice)
+    Slice   --> Slice   : Slice Grouping (slice)
+alt [slice can be grouped to other slice services]
+    // do nothing and return existing slice
+else [slice needs new services]
+    Slice   --> ... : normal logic
+end alt
+    Slice   --> OSS/BSS : slice
+
+slice.proto:
+  rpc OrderSliceWithSLA(context.Slice) returns (context.SliceId) {} // If slice with SLA already exists, returns slice. If not, it creates it.
+  rpc RunSliceGrouping (context.Empty) returns (context.Empty) {} // Optimizes the underlying services and re-maps them to the requested slices.
diff --git a/src/slice/service/SliceGrouper.py b/src/slice/service/SliceGrouper.py
new file mode 100644
index 000000000..e5363de1b
--- /dev/null
+++ b/src/slice/service/SliceGrouper.py
@@ -0,0 +1,61 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#import numpy as np
+#import pandas as pd
+from matplotlib import pyplot as plt
+from sklearn.datasets import make_blobs
+from sklearn.cluster import KMeans
+from common.proto.context_pb2 import ContextId
+from context.client.ContextClient import ContextClient
+
+class SliceGrouper:
+    def __init__(self) -> None:
+        pass
+
+    def load_slices(self, context_uuid : str) -> None:
+        context_client = ContextClient()
+
+        
+        context_client.ListSlices(ContextId)
+
+X, y = make_blobs(n_samples=300, n_features=2, cluster_std=[(10,.1),(100,.01)],centers= [(10,.9), (100,.99)])
+
+plt.scatter(X[:,0], X[:,1])
+plt.show()
+
+
+wcss = []
+for i in range(1, 11):
+    kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
+    kmeans.fit(X)
+    wcss.append(kmeans.inertia_)
+plt.plot(range(1, 11), wcss)
+plt.title('Elbow Method')
+plt.xlabel('Number of clusters')
+plt.ylabel('WCSS')
+plt.show()
+
+
+kmeans = KMeans(n_clusters=2, init='k-means++', max_iter=300, n_init=10, random_state=0)
+pred_y = kmeans.fit_predict(X)
+plt.scatter(X[:,0], X[:,1])
+plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red')
+plt.ylabel('service-slo-availability')
+plt.xlabel('service-slo-one-way-bandwidth')
+ax = plt.subplot(1, 1, 1)
+
+ax.set_ylim(bottom=0., top=1.)
+ax.set_xlim(left=0.)
+plt.show()
-- 
GitLab


From c44efbcf975649cfae8a22c587235f45c503c5ae Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 9 Feb 2023 18:19:27 +0000
Subject: [PATCH 034/229] Common - Tool - DescriptorLoader:

- Implemented parallel descriptor loading, especially for device onboarding
---
 src/common/tools/descriptor/Loader.py | 36 ++++++++++++++++++++-------
 1 file changed, 27 insertions(+), 9 deletions(-)

diff --git a/src/common/tools/descriptor/Loader.py b/src/common/tools/descriptor/Loader.py
index fc3b008b4..5972d425b 100644
--- a/src/common/tools/descriptor/Loader.py
+++ b/src/common/tools/descriptor/Loader.py
@@ -31,8 +31,8 @@
 #    for message,level in compose_notifications(results):
 #        loggers.get(level)(message)
 
-import json
-from typing import Dict, List, Optional, Tuple, Union
+import concurrent.futures, json, logging, operator
+from typing import Any, Dict, List, Optional, Tuple, Union
 from common.proto.context_pb2 import Connection, Context, Device, Link, Service, Slice, Topology
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -43,6 +43,8 @@ from .Tools import (
     get_descriptors_add_contexts, get_descriptors_add_services, get_descriptors_add_slices,
     get_descriptors_add_topologies, split_devices_by_rules)
 
+LOGGER = logging.getLogger(__name__)
+
 ENTITY_TO_TEXT = {
     # name   => singular,    plural
     'context'   : ('Context',    'Contexts'   ),
@@ -79,7 +81,7 @@ def compose_notifications(results : TypeResults) -> TypeNotificationList:
 
 class DescriptorLoader:
     def __init__(
-        self, descriptors : Union[str, Dict],
+        self, descriptors : Union[str, Dict], num_workers : int = 1,
         context_client : Optional[ContextClient] = None, device_client : Optional[DeviceClient] = None,
         service_client : Optional[ServiceClient] = None, slice_client : Optional[SliceClient] = None
     ) -> None:
@@ -93,6 +95,8 @@ class DescriptorLoader:
         self.__slices      = self.__descriptors.get('slices'     , [])
         self.__connections = self.__descriptors.get('connections', [])
 
+        self.__num_workers = num_workers
+
         self.__contexts_add   = None
         self.__topologies_add = None
         self.__devices_add    = None
@@ -242,12 +246,26 @@ class DescriptorLoader:
         #self.__dev_cli.close()
         #self.__ctx_cli.close()
 
+    @staticmethod
+    def worker(grpc_method, grpc_class, entity) -> Any:
+        return grpc_method(grpc_class(**entity))
+
     def _process_descr(self, entity_name, action_name, grpc_method, grpc_class, entities) -> None:
         num_ok, error_list = 0, []
-        for entity in entities:
-            try:
-                grpc_method(grpc_class(**entity))
-                num_ok += 1
-            except Exception as e: # pylint: disable=broad-except
-                error_list.append(f'{str(entity)}: {str(e)}')
+
+        with concurrent.futures.ThreadPoolExecutor(max_workers=self.__num_workers) as executor:
+            future_to_entity = {
+                executor.submit(DescriptorLoader.worker, grpc_method, grpc_class, entity): (i, entity)
+                for i,entity in enumerate(entities)
+            }
+
+            for future in concurrent.futures.as_completed(future_to_entity):
+                i, entity = future_to_entity[future]
+                try:
+                    _ = future.result()
+                    num_ok += 1
+                except Exception as e:  # pylint: disable=broad-except
+                    error_list.append((i, f'{str(entity)}: {str(e)}'))
+
+        error_list = [str_error for _,str_error in sorted(error_list, key=operator.itemgetter(0))]
         self.__results.append((entity_name, action_name, num_ok, error_list))
-- 
GitLab


From 69f84c9137042c8d9ada66fae6f145749561355d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 9 Feb 2023 18:19:43 +0000
Subject: [PATCH 035/229] WebUI component:

- enable parallel descriptor loading
---
 src/webui/service/main/routes.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/webui/service/main/routes.py b/src/webui/service/main/routes.py
index 38d13aad5..dcbbf71a6 100644
--- a/src/webui/service/main/routes.py
+++ b/src/webui/service/main/routes.py
@@ -34,6 +34,8 @@ slice_client = SliceClient()
 
 LOGGER = logging.getLogger(__name__)
 
+DESCRIPTOR_LOADER_NUM_WORKERS = 10
+
 def process_descriptors(descriptors):
     try:
         descriptors_file = request.files[descriptors.name]
@@ -43,7 +45,7 @@ def process_descriptors(descriptors):
         flash(f'Unable to load descriptor file: {str(e)}', 'danger')
         return
 
-    descriptor_loader = DescriptorLoader(descriptors)
+    descriptor_loader = DescriptorLoader(descriptors, num_workers=DESCRIPTOR_LOADER_NUM_WORKERS)
     results = descriptor_loader.process()
     for message,level in compose_notifications(results):
         if level == 'error': LOGGER.warning('ERROR message={:s}'.format(str(message)))
-- 
GitLab


From e4479517867a94798a0dc37e093b927822debf7e Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Fri, 10 Feb 2023 09:46:42 +0100
Subject: [PATCH 036/229] TODO L2 rueles

---
 .../load_gen/RequestGenerator.py              | 23 +++++++------------
 .../l2nm_openconfig/ConfigRules.py            |  5 ++--
 .../l3nm_openconfig/ConfigRules.py            |  4 ++--
 3 files changed, 13 insertions(+), 19 deletions(-)

diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index a98d957a0..56fbf721c 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -245,26 +245,20 @@ class RequestGenerator:
             dst_device_name = self._device_data[dst_device_uuid]['name']
             dst_router_id = ROUTER_ID.get(dst_device_name, '10.0.0.{:d}'.format(int(dst_device_name.replace('R', ''))))
 
-            # TODO: Check if it is needed (TID)
-            remote = VIRTUAL_CIRCUIT.get(src_device_uuid)
-
             config_rules = [
                 json_config_rule_set('/settings', {
                     'mtu': 1512
                 }),
                 json_config_rule_set(
                     '/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_name, src_endpoint_name), {
-                        'router_id': src_router_id,
-                        'sub_interface_index': vlan_id,
+                        'sub_interface_index': 0,
                         'vlan_id': vlan_id,
                         'remote_router': dst_router_id,
                         'circuit_id': circuit_id,
-                        'remote': remote,
                 }),
                 json_config_rule_set(
                     '/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_name, dst_endpoint_name), {
-                        'router_id': dst_router_id,
-                        'sub_interface_index': vlan_id,
+                        'sub_interface_index': 0,
                         'vlan_id': vlan_id,
                         'remote_router': src_router_id,
                         'circuit_id': circuit_id,
@@ -300,9 +294,8 @@ class RequestGenerator:
             if dst_router_id is None: dst_router_id = '10.0.0.{:d}'.format(dst_router_num)
             dst_address_ip = '10.{:d}.{:d}.{:d}'.format(y, x, dst_router_num)
 
-            # TODO: RENAME TO POLICY AZ Y ZA (name of variable and name of policy)
-            policy_R1 = 'srv_{:d}_a'.format(vlan_id)
-            policy_R2 = 'srv_{:d}_b'.format(vlan_id)
+            policy_AZ = 'srv_{:d}_a'.format(vlan_id)
+            policy_ZA = 'srv_{:d}_b'.format(vlan_id)
 
             config_rules = [
                 json_config_rule_set('/settings', {
@@ -318,8 +311,8 @@ class RequestGenerator:
                         'vlan_id'            : vlan_id,
                         'address_ip'         : src_address_ip,
                         'address_prefix'     : 16,
-                        'policy_1'           : policy_R1,
-                        'policy_2'           : policy_R2,
+                        'policy_AZ'           : policy_AZ,
+                        'policy_ZA'           : policy_ZA,
                     }),
                 json_config_rule_set(
                     '/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_name, dst_endpoint_name), {
@@ -329,8 +322,8 @@ class RequestGenerator:
                         'vlan_id'            : vlan_id,
                         'address_ip'         : dst_address_ip,
                         'address_prefix'     : 16,
-                        'policy_1'           : policy_R2,
-                        'policy_2'           : policy_R1,
+                        'policy_AZ'           : policy_AZ,
+                        'policy_ZA'           : policy_ZA,
                     }),
             ]
             return json_service_l3nm_planned(
diff --git a/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
index fffa0fdfc..bbd91df93 100644
--- a/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
@@ -37,12 +37,13 @@ def setup_config_rules(
 
     #router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
     #route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
-    #sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
+    sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
     vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     #address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     #address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
     remote_router       = json_endpoint_settings.get('remote_router',       '5.5.5.5')  # '5.5.5.5'
     circuit_id          = json_endpoint_settings.get('circuit_id',          '111'    )  # '111'
+    
 
     if_cirid_name         = '{:s}.{:s}'.format(endpoint_name, str(circuit_id))
     network_instance_name = 'ELAN-AC:{:s}'.format(str(circuit_id))
@@ -59,7 +60,7 @@ def setup_config_rules(
             '/interface[{:s}]/subinterface[0]'.format(if_cirid_name),
             {'name': if_cirid_name, 
              'type': 'l2vlan', 
-             'index': 0, 
+             'index': sub_interface_index, 
              'vlan_id': vlan_id}),
 
         json_config_rule_set(
diff --git a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
index 2e6224a67..8862ac8dc 100644
--- a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
@@ -41,8 +41,8 @@ def setup_config_rules(
     vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
-    policy_import       = json_endpoint_settings.get('policy_1',            '2'      )  # 2
-    policy_export       = json_endpoint_settings.get('policy_2',            '7'      )  # 30
+    policy_import       = json_endpoint_settings.get('policy_AZ',            '2'      )  # 2
+    policy_export       = json_endpoint_settings.get('policy_ZA',            '7'      )  # 30
 
     if_subif_name       = '{:s}.{:d}'.format(endpoint_name, vlan_id)
 
-- 
GitLab


From 995e02e6cc4beb65c0cf17b6f6cd344bb5414829 Mon Sep 17 00:00:00 2001
From: Panagiotis Famelis <pfamelis@ubitech.eu>
Date: Fri, 10 Feb 2023 10:53:55 +0200
Subject: [PATCH 037/229] fix: add None checks to endpoint names

---
 .../service_handlers/p4/p4_service_handler.py       | 13 +++++++++++++
 src/tests/p4/tests/test_functional_bootstrap.py     |  2 +-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/service/service/service_handlers/p4/p4_service_handler.py b/src/service/service/service_handlers/p4/p4_service_handler.py
index b068e0776..6f2cfb5a9 100644
--- a/src/service/service/service_handlers/p4/p4_service_handler.py
+++ b/src/service/service/service_handlers/p4/p4_service_handler.py
@@ -71,6 +71,7 @@ def create_rule_del(endpoint_a, endpoint_b):
     )
 
 def find_names(uuid_a, uuid_b, device_endpoints):
+    endpoint_a, endpoint_b = None, None
     for endpoint in device_endpoints:
         if endpoint.endpoint_id.endpoint_uuid.uuid == uuid_a:
             endpoint_a = endpoint.name
@@ -139,6 +140,12 @@ class P4ServiceHandler(_ServiceHandler):
                     
                     # Find names from uuids
                     (endpoint_a, endpoint_b) = find_names(matched_endpoint_uuid, endpoint_uuid, device.device_endpoints)
+                    if endpoint_a is None:
+                        LOGGER.exception('Unable to find name of endpoint({:s})'.format(str(matched_endpoint_uuid)))
+                        raise Exception('Unable to find name of endpoint({:s})'.format(str(matched_endpoint_uuid)))
+                    if endpoint_b is None:
+                        LOGGER.exception('Unable to find name of endpoint({:s})'.format(str(endpoint_uuid)))
+                        raise Exception('Unable to find name of endpoint({:s})'.format(str(endpoint_uuid)))
 
                     # One way
                     rule = create_rule_set(endpoint_a, endpoint_b) 
@@ -203,6 +210,12 @@ class P4ServiceHandler(_ServiceHandler):
 
                     # Find names from uuids
                     (endpoint_a, endpoint_b) = find_names(matched_endpoint_uuid, endpoint_uuid, device.device_endpoints)
+                    if endpoint_a is None:
+                        LOGGER.exception('Unable to find name of endpoint({:s})'.format(str(matched_endpoint_uuid)))
+                        raise Exception('Unable to find name of endpoint({:s})'.format(str(matched_endpoint_uuid)))
+                    if endpoint_b is None:
+                        LOGGER.exception('Unable to find name of endpoint({:s})'.format(str(endpoint_uuid)))
+                        raise Exception('Unable to find name of endpoint({:s})'.format(str(endpoint_uuid)))
 
                     # One way
                     rule = create_rule_del(endpoint_a, endpoint_b) 
diff --git a/src/tests/p4/tests/test_functional_bootstrap.py b/src/tests/p4/tests/test_functional_bootstrap.py
index c2a2837ab..5e39490f2 100644
--- a/src/tests/p4/tests/test_functional_bootstrap.py
+++ b/src/tests/p4/tests/test_functional_bootstrap.py
@@ -106,7 +106,7 @@ def test_devices_bootstraping(
         link_uuid = link['link_id']['link_uuid']['uuid']
         LOGGER.info('Adding Link {:s}'.format(link_uuid))
         response = context_client.SetLink(Link(**link))
-        assert link_uuid == link_uuid
+        assert response.name == link_uuid
         context_client.SetLink(Link(**link))
 
 def test_devices_bootstrapped(context_client : ContextClient):  # pylint: disable=redefined-outer-name
-- 
GitLab


From e8de1c11965351579995b1f00977c2dec4032fd1 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 10 Feb 2023 10:38:46 +0000
Subject: [PATCH 038/229] Slice component:

- Updated SliceClient class with missing methods
---
 src/slice/client/SliceClient.py | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/src/slice/client/SliceClient.py b/src/slice/client/SliceClient.py
index a3e5d6490..792a2037f 100644
--- a/src/slice/client/SliceClient.py
+++ b/src/slice/client/SliceClient.py
@@ -65,3 +65,17 @@ class SliceClient:
         response = self.stub.DeleteSlice(request)
         LOGGER.debug('DeleteSlice result: {:s}'.format(grpc_message_to_json_string(response)))
         return response
+
+    @RETRY_DECORATOR
+    def OrderSliceWithSLA(self, request : Slice) -> SliceId:
+        LOGGER.debug('OrderSliceWithSLA request: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.OrderSliceWithSLA(request)
+        LOGGER.debug('OrderSliceWithSLA result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
+    @RETRY_DECORATOR
+    def RunSliceGrouping(self, request : Empty) -> Empty:
+        LOGGER.debug('RunSliceGrouping request: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.RunSliceGrouping(request)
+        LOGGER.debug('RunSliceGrouping result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
-- 
GitLab


From 542c5abaeb32d3efc1637fc7f9f33aa770fe862d Mon Sep 17 00:00:00 2001
From: Ville Hallivuori <VHallivuori@infinera.com>
Date: Fri, 10 Feb 2023 14:26:06 +0200
Subject: [PATCH 039/229] Add service-cli tool for improved testing of XR
 services

---
 src/device/service/drivers/xr/README_XR.md   |  12 ++
 src/device/service/drivers/xr/service-cli.py | 144 +++++++++++++++++++
 2 files changed, 156 insertions(+)
 create mode 100755 src/device/service/drivers/xr/service-cli.py

diff --git a/src/device/service/drivers/xr/README_XR.md b/src/device/service/drivers/xr/README_XR.md
index 108a36769..c741c3e80 100644
--- a/src/device/service/drivers/xr/README_XR.md
+++ b/src/device/service/drivers/xr/README_XR.md
@@ -137,6 +137,18 @@ Setup service by following commands in src directory. Kubernetes endpoins change
     python -m pytest --verbose tests/ofc22/tests/test_functional_create_service_xr.py 
 ```
 
+For topology different than used by the test_functional_create/delete_service_xr.py, one can also
+use service-cli.py tool in the xr module directory. It allows creation of ELINE services between
+arbitrary endpoints in the topology (with consequent underlying XR service instantiation). Run in
+*xr module directory*.  Representative examples:
+```
+    PYTHONPATH=../../../../ ./service-cli.py create 1 R1-EMU 13/1/2 500 2 R3-EMU 13/1/2 500
+    PYTHONPATH=../../../../ ./service-cli.py list
+    PYTHONPATH=../../../../ ./service-cli.py delete 43a8046a-5dec-463d-82f7-7cc3442dbf4f
+```
+The PYTHONPATH is mandatory. Suitable topology JSON must have been loaded before. With the
+CocroachDB persistence, it is sufficient to load the topology once and it will persist.
+
 Good logs to check are:
 
 * kubectl logs   service/deviceservice     --namespace tfs
diff --git a/src/device/service/drivers/xr/service-cli.py b/src/device/service/drivers/xr/service-cli.py
new file mode 100755
index 000000000..01bd2aaa1
--- /dev/null
+++ b/src/device/service/drivers/xr/service-cli.py
@@ -0,0 +1,144 @@
+#!/usr/bin/env python3
+#pylint: disable=invalid-name, missing-function-docstring, line-too-long, logging-fstring-interpolation, missing-class-docstring, missing-module-docstring
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Manage L2 services (with underlying XR connectivity) without need to use unit test
+# files or excessive JSON definitions
+#
+# Run in this directory with PYTHONPATH=../../../../
+# E.g.:
+#     PYTHONPATH=../../../../  ./service-cli.py create 1 R1-EMU 13/1/2 500 2 R3-EMU 13/1/2 500
+#     PYTHONPATH=../../../../  ./service-cli.py list
+#     PYTHONPATH=../../../../  ./service-cli.py delete 43a8046a-5dec-463d-82f7-7cc3442dbf4f
+
+
+import argparse
+import logging
+import traceback
+from contextlib import contextmanager
+
+from common.Settings import get_setting
+from context.client.ContextClient import ContextClient
+from tests.tools.mock_osm.MockOSM import MockOSM
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum, ServiceStatusEnum
+from common.tools.grpc.Tools import grpc_message_to_json_string
+
+LOGGER = logging.getLogger(__name__)
+
+WIM_USERNAME = 'admin'
+WIM_PASSWORD = 'admin'
+
+@contextmanager
+def make_context_client():
+    try:
+        _client = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
+        yield _client
+    finally:
+        _client.close()
+
+def make_osm_wim():
+    wim_url = 'http://{:s}:{:s}'.format(
+        get_setting('COMPUTESERVICE_SERVICE_HOST'), str(get_setting('COMPUTESERVICE_SERVICE_PORT_HTTP')))
+    return MockOSM(wim_url, WIM_MAPPING, WIM_USERNAME, WIM_PASSWORD)
+
+logging.basicConfig(level=logging.ERROR)
+
+parser = argparse.ArgumentParser(description='TF Service Management Utility')
+subparsers = parser.add_subparsers(dest="command")
+subparsers.required = True
+
+create_parser = subparsers.add_parser('create')
+create_parser.add_argument('site1', type=int, help='One endpoint of the service, e.g. 1')
+create_parser.add_argument('device1', type=str, help='One endpoint of the service, e.g. R1-EMU')
+create_parser.add_argument('interface1', type=str, help='One endpoint of the service, e.g. 13/1/2')
+create_parser.add_argument('vlan1', type=int, help='VLAN in first endpoint, e.g. 500')
+
+create_parser.add_argument('site2', type=int, help='One endpoint of the service, e.g. 2')
+create_parser.add_argument('device2', type=str, help='One endpoint of the service, e.g. R3-EMU')
+create_parser.add_argument('interface2', type=str, help='One endpoint of the service, e.g. 13/1/2')
+create_parser.add_argument('vlan2', type=int, help='VLAN in first endpoint, e.g. 500')
+
+delete_parser = subparsers.add_parser('delete')
+delete_parser.add_argument('service_uuid', type=str, help='UUID of the service to be deleted')
+
+list_parser = subparsers.add_parser('list')
+
+args = parser.parse_args()
+
+WIM_SERVICE_TYPE = 'ELINE'
+CONTEXT_ID = {'context_uuid': {'uuid': 'admin'}}
+
+if args.command == "create":
+    endpoint1 = f"{args.device1}:{args.interface1}"
+    endpoint2 = f"{args.device2}:{args.interface2}"
+
+    WIM_MAPPING  = [
+        {'device-id': args.device1, 'service_endpoint_id': endpoint1,
+        'service_mapping_info': {'bearer': {'bearer-reference': endpoint1}, 'site-id': args.site1}},
+        {'device-id': args.device2, 'service_endpoint_id': endpoint2,
+        'service_mapping_info': {'bearer': {'bearer-reference': endpoint2}, 'site-id': args.site2}},
+    ]
+    WIM_SERVICE_CONNECTION_POINTS = [
+        {'service_endpoint_id': endpoint1,
+            'service_endpoint_encapsulation_type': 'dot1q',
+            'service_endpoint_encapsulation_info': {'vlan': args.vlan1}},
+        {'service_endpoint_id': endpoint2,
+            'service_endpoint_encapsulation_type': 'dot1q',
+            'service_endpoint_encapsulation_info': {'vlan': args.vlan2}},
+    ]
+else:
+    WIM_MAPPING = []
+    WIM_SERVICE_CONNECTION_POINTS = []
+
+#print(str(args))
+print(f"=== WIM_SERVICE_TYPE: {WIM_SERVICE_TYPE}")
+print(f"=== WIM_SERVICE_CONNECTION_POINTS: {WIM_SERVICE_CONNECTION_POINTS}")
+print(f"=== WIM_MAPPING: {WIM_MAPPING}")
+
+with make_context_client() as client:
+    osm_wim = make_osm_wim();
+
+    if args.command == "create":
+        service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
+        print(f"*** Create connectivity service --> {service_uuid}")
+        status = osm_wim.get_connectivity_service_status(service_uuid)
+        print(f"*** Get created service status --> {str(status)}")
+
+    elif args.command == "delete":
+        osm_wim.wim.check_credentials()
+        try:
+            osm_wim.wim.delete_connectivity_service(args.service_uuid)
+            print(f"*** Service {args.service_uuid} is no longer present (delete was successfull or service did not exist)")
+        except Exception as e:
+            print(f"*** Failed to delete service {args.service_uuid}, {e}")
+    elif args.command == "list":
+        response = client.ListServices(ContextId(**CONTEXT_ID))
+
+        #print('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+        for service in response.services:
+            scs = ""
+            
+            # See if there are endpoint constraints that might be regognizable by the user.
+            # Keys do not necessarily exist, so catch exceptions and ignore those constraints
+            # that we cannot easily represent.
+            for sc in service.service_constraints:
+                try:
+                    scs += f"{sc.endpoint_location.endpoint_id.device_id.device_uuid.uuid}:{sc.endpoint_location.endpoint_id.endpoint_uuid.uuid} "
+                except Exception:
+                    pass
+
+            print(f"{service.service_id.service_uuid.uuid:36}  {ServiceTypeEnum.Name(service.service_type):40}  {ServiceStatusEnum.Name(service.service_status.service_status)}  {scs}")
+
+
-- 
GitLab


From 940abeed8f4aa12356ec09535bd5e3d379e5002f Mon Sep 17 00:00:00 2001
From: Panagiotis Famelis <pfamelis@ubitech.eu>
Date: Tue, 14 Feb 2023 11:48:14 +0200
Subject: [PATCH 040/229] fix: removed assertions in scripts as they are broken
 (for now)

---
 src/tests/p4/tests/test_functional_bootstrap.py      |  2 --
 src/tests/p4/tests/test_functional_cleanup.py        |  3 ---
 src/tests/p4/tests/test_functional_create_service.py | 11 +----------
 3 files changed, 1 insertion(+), 15 deletions(-)

diff --git a/src/tests/p4/tests/test_functional_bootstrap.py b/src/tests/p4/tests/test_functional_bootstrap.py
index 5e39490f2..972692173 100644
--- a/src/tests/p4/tests/test_functional_bootstrap.py
+++ b/src/tests/p4/tests/test_functional_bootstrap.py
@@ -106,8 +106,6 @@ def test_devices_bootstraping(
         link_uuid = link['link_id']['link_uuid']['uuid']
         LOGGER.info('Adding Link {:s}'.format(link_uuid))
         response = context_client.SetLink(Link(**link))
-        assert response.name == link_uuid
-        context_client.SetLink(Link(**link))
 
 def test_devices_bootstrapped(context_client : ContextClient):  # pylint: disable=redefined-outer-name
     # ----- List entities - Ensure bevices are created -----------------------------------------------------------------
diff --git a/src/tests/p4/tests/test_functional_cleanup.py b/src/tests/p4/tests/test_functional_cleanup.py
index 852f2a655..aad56a210 100644
--- a/src/tests/p4/tests/test_functional_cleanup.py
+++ b/src/tests/p4/tests/test_functional_cleanup.py
@@ -58,7 +58,6 @@ def test_scenario_cleanup(
         device_uuid = device_id['device_uuid']['uuid']
         LOGGER.info('Deleting Device {:s}'.format(device_uuid))
         device_client.DeleteDevice(DeviceId(**device_id))
-        #expected_events.append(('DeviceEvent', EVENT_REMOVE, json_device_id(device_uuid)))
 
     response = context_client.ListDevices(Empty())
     assert len(response.devices) == 0
@@ -72,7 +71,6 @@ def test_scenario_cleanup(
         LOGGER.info('Deleting Topology {:s}/{:s}'.format(context_uuid, topology_uuid))
         context_client.RemoveTopology(TopologyId(**topology_id))
         context_id = json_context_id(context_uuid)
-        #expected_events.append(('TopologyEvent', EVENT_REMOVE, json_topology_id(topology_uuid, context_id=context_id)))
 
     # ----- Delete Contexts and Validate Collected Events --------------------------------------------------------------
     for context in CONTEXTS:
@@ -80,4 +78,3 @@ def test_scenario_cleanup(
         context_uuid = context_id['context_uuid']['uuid']
         LOGGER.info('Deleting Context {:s}'.format(context_uuid))
         context_client.RemoveContext(ContextId(**context_id))
-        #expected_events.append(('ContextEvent', EVENT_REMOVE, json_context_id(context_uuid)))
diff --git a/src/tests/p4/tests/test_functional_create_service.py b/src/tests/p4/tests/test_functional_create_service.py
index beaa23ba3..76a681eea 100644
--- a/src/tests/p4/tests/test_functional_create_service.py
+++ b/src/tests/p4/tests/test_functional_create_service.py
@@ -54,15 +54,6 @@ def service_client():
 def test_rules_entry(
     context_client : ContextClient, device_client : DeviceClient, service_client : ServiceClient):  # pylint: disable=redefined-outer-name
 
-
-
-#    for device, _, __ in DEVICES:
-#        # Enable device
-#        device_p4_with_operational_status = copy.deepcopy(device)
-#        device_p4_with_operational_status['device_operational_status'] = \
-#            DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED
-#        device_client.ConfigureDevice(Device(**device_p4_with_operational_status))
-
     # ----- Create Services ---------------------------------------------------------------
     for service, endpoints in SERVICES:
         # Insert Service (table entries)
@@ -71,4 +62,4 @@ def test_rules_entry(
         service_p4 = copy.deepcopy(service)
         service_client.CreateService(Service(**service_p4))
         service_p4['service_endpoint_ids'].extend(endpoints)
-        service_client.UpdateService(Service(**service_p4))
\ No newline at end of file
+        service_client.UpdateService(Service(**service_p4))
-- 
GitLab


From 4fed2234918f1cf6308484ccc46fde9c9aa52645 Mon Sep 17 00:00:00 2001
From: Lluis Gifre Renom <lluis.gifre@cttc.es>
Date: Thu, 16 Feb 2023 15:01:36 +0000
Subject: [PATCH 041/229] Monitoring component:

- Added wait for device component
---
 src/monitoring/service/__main__.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/monitoring/service/__main__.py b/src/monitoring/service/__main__.py
index fc460151b..14f560960 100644
--- a/src/monitoring/service/__main__.py
+++ b/src/monitoring/service/__main__.py
@@ -69,6 +69,8 @@ def main():
     wait_for_environment_variables([
         get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_HOST     ),
         get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_PORT_GRPC),
+        get_env_var_name(ServiceNameEnum.DEVICE,  ENVVAR_SUFIX_SERVICE_HOST     ),
+        get_env_var_name(ServiceNameEnum.DEVICE,  ENVVAR_SUFIX_SERVICE_PORT_GRPC),
     ])
 
     signal.signal(signal.SIGINT,  signal_handler)
-- 
GitLab


From bb094bf1bca8853fa691e439e14af535ddc7fdd1 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 16 Feb 2023 17:15:15 +0000
Subject: [PATCH 042/229] Common - Context Queries:

- Added method to get Context
- Added method to get Link
---
 src/common/tools/context_queries/Context.py | 18 +++++++++++++++++-
 src/common/tools/context_queries/Link.py    | 19 +++++++++++++++++--
 2 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/src/common/tools/context_queries/Context.py b/src/common/tools/context_queries/Context.py
index d28ca3991..a627b9ba5 100644
--- a/src/common/tools/context_queries/Context.py
+++ b/src/common/tools/context_queries/Context.py
@@ -12,7 +12,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from common.proto.context_pb2 import Context, Empty
+import grpc
+from typing import Optional
+from common.proto.context_pb2 import Context, ContextId, Empty
 from common.tools.object_factory.Context import json_context
 from context.client.ContextClient import ContextClient
 
@@ -23,3 +25,17 @@ def create_context(
     existing_context_uuids = {context_id.context_uuid.uuid for context_id in existing_context_ids.context_ids}
     if context_uuid in existing_context_uuids: return
     context_client.SetContext(Context(**json_context(context_uuid)))
+
+def get_context(context_client : ContextClient, context_uuid : str, rw_copy : bool = False) -> Optional[Context]:
+    try:
+        # pylint: disable=no-member
+        context_id = ContextId()
+        context_id.context_uuid.uuid = context_uuid
+        ro_context = context_client.GetContext(context_id)
+        if not rw_copy: return ro_context
+        rw_context = Context()
+        rw_context.CopyFrom(ro_context)
+        return rw_context
+    except grpc.RpcError:
+        #LOGGER.exception('Unable to get Context({:s})'.format(str(context_uuid)))
+        return None
diff --git a/src/common/tools/context_queries/Link.py b/src/common/tools/context_queries/Link.py
index 83a878bde..291cdcf37 100644
--- a/src/common/tools/context_queries/Link.py
+++ b/src/common/tools/context_queries/Link.py
@@ -12,11 +12,26 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from typing import List, Set
-from common.proto.context_pb2 import ContextId, Empty, Link, Topology, TopologyId
+import grpc
+from typing import List, Optional, Set
+from common.proto.context_pb2 import ContextId, Empty, Link, LinkId, Topology, TopologyId
 from common.tools.object_factory.Topology import json_topology_id
 from context.client.ContextClient import ContextClient
 
+def get_link(context_client : ContextClient, link_uuid : str, rw_copy : bool = False) -> Optional[Link]:
+    try:
+        # pylint: disable=no-member
+        link_id = LinkId()
+        link_id.link_uuid.uuid = link_uuid
+        ro_link = context_client.GetLink(link_id)
+        if not rw_copy: return ro_link
+        rw_link = Link()
+        rw_link.CopyFrom(ro_link)
+        return rw_link
+    except grpc.RpcError:
+        #LOGGER.exception('Unable to get Link({:s})'.format(str(link_uuid)))
+        return None
+
 def get_existing_link_uuids(context_client : ContextClient) -> Set[str]:
     existing_link_ids = context_client.ListLinkIds(Empty())
     existing_link_uuids = {link_id.link_uuid.uuid for link_id in existing_link_ids.link_ids}
-- 
GitLab


From 36b2d7923dc017ad0269050fbedfbb04fbce3a72 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 16 Feb 2023 17:15:52 +0000
Subject: [PATCH 043/229] Common - MutexQueues:

- Added safety control
---
 src/common/tools/mutex_queues/MutexQueues.py | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/common/tools/mutex_queues/MutexQueues.py b/src/common/tools/mutex_queues/MutexQueues.py
index b9fc567d5..96e22a86f 100644
--- a/src/common/tools/mutex_queues/MutexQueues.py
+++ b/src/common/tools/mutex_queues/MutexQueues.py
@@ -35,7 +35,7 @@
 #           self.mutex_queues.signal_done(device_uuid)
 
 import threading
-from queue import Queue
+from queue import Queue, Empty
 from typing import Dict
 
 class MutexQueues:
@@ -67,8 +67,11 @@ class MutexQueues:
         with self.lock:
             queue : Queue = self.mutex_queues.setdefault(queue_name, Queue())
             
-            # remove muself from the queue
-            queue.get_nowait()
+            # remove myself from the queue
+            try:
+                queue.get(block=True, timeout=0.1)
+            except Empty:
+                pass
 
             # if there are no other tasks queued, return
             if queue.qsize() == 0: return
-- 
GitLab


From 24776f2c27ba154308d72dd47932a8c2b84cb854 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 08:55:17 +0000
Subject: [PATCH 044/229] Device component - Emulated Driver:

- Reduced log level in some messages
---
 .../service/drivers/emulated/SyntheticSamplingParameters.py     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/device/service/drivers/emulated/SyntheticSamplingParameters.py b/src/device/service/drivers/emulated/SyntheticSamplingParameters.py
index ea5cf2cb7..5bbbf89e8 100644
--- a/src/device/service/drivers/emulated/SyntheticSamplingParameters.py
+++ b/src/device/service/drivers/emulated/SyntheticSamplingParameters.py
@@ -51,7 +51,7 @@ class SyntheticSamplingParameters:
             metric = match.group(2)
             metric_sense = metric.lower().replace('packets_', '').replace('bytes_', '')
 
-            LOGGER.info(MSG_INFO.format(monitoring_resource_key, endpoint_uuid, metric, metric_sense))
+            LOGGER.debug(MSG_INFO.format(monitoring_resource_key, endpoint_uuid, metric, metric_sense))
 
             parameters_key = '{:s}-{:s}'.format(endpoint_uuid, metric_sense)
             parameters = self.__data.get(parameters_key)
-- 
GitLab


From 4d3315aa12a5139ac12587006e65cf2037e5ff6d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:07:09 +0000
Subject: [PATCH 045/229] WebUI component:

- added validation entities exist
- added missing constraint rendering statements
- minor template improvements
- code cleanup
---
 src/webui/service/__init__.py                 |   1 +
 src/webui/service/device/forms.py             |  13 +-
 src/webui/service/device/routes.py            | 106 +++++++--------
 src/webui/service/link/routes.py              |  46 ++++---
 src/webui/service/service/routes.py           |  98 +++++++-------
 src/webui/service/slice/routes.py             | 122 +++++++++---------
 src/webui/service/templates/base.html         |   2 +-
 .../service/templates/device/detail.html      |   5 +-
 .../service/templates/service/detail.html     |  83 +++++++-----
 src/webui/service/templates/slice/detail.html |  69 ++++++++--
 10 files changed, 314 insertions(+), 231 deletions(-)

diff --git a/src/webui/service/__init__.py b/src/webui/service/__init__.py
index d5b40b486..ef5253b87 100644
--- a/src/webui/service/__init__.py
+++ b/src/webui/service/__init__.py
@@ -96,6 +96,7 @@ def create_app(use_config=None, web_app_root=None):
     app.register_blueprint(link)
 
     app.jinja_env.globals.update({              # pylint: disable=no-member
+        'enumerate'           : enumerate,
         'json_to_list'        : json_to_list,
         'get_working_context' : get_working_context,
         'get_working_topology': get_working_topology,
diff --git a/src/webui/service/device/forms.py b/src/webui/service/device/forms.py
index e496c4d43..c6bacac9b 100644
--- a/src/webui/service/device/forms.py
+++ b/src/webui/service/device/forms.py
@@ -12,21 +12,16 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# external imports
 from flask_wtf import FlaskForm
-from wtforms import StringField, SelectField, TextAreaField, SubmitField, BooleanField, Form
-from wtforms.validators import DataRequired, Length, NumberRange, Regexp, ValidationError
+from wtforms import StringField, SelectField, TextAreaField, SubmitField, BooleanField
+from wtforms.validators import DataRequired, Length, NumberRange, ValidationError
 from common.proto.context_pb2 import DeviceOperationalStatusEnum
-from webui.utils.form_validators import key_value_validator
 
 class AddDeviceForm(FlaskForm):
     device_id = StringField('ID', 
                            validators=[DataRequired(), Length(min=5)])
-    device_type = SelectField('Type', choices = [])                                                     
-    operational_status = SelectField('Operational Status',
-                        #    choices=[(-1, 'Select...'), (0, 'Undefined'), (1, 'Disabled'), (2, 'Enabled')],
-                           coerce=int,
-                           validators=[NumberRange(min=0)])
+    device_type = SelectField('Type')
+    operational_status = SelectField('Operational Status', coerce=int, validators=[NumberRange(min=0)])
     device_drivers_undefined = BooleanField('UNDEFINED / EMULATED')
     device_drivers_openconfig = BooleanField('OPENCONFIG')
     device_drivers_transport_api = BooleanField('TRANSPORT_API')
diff --git a/src/webui/service/device/routes.py b/src/webui/service/device/routes.py
index ce3edcfda..ebf77a35f 100644
--- a/src/webui/service/device/routes.py
+++ b/src/webui/service/device/routes.py
@@ -14,16 +14,14 @@
 
 import json
 from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for
+from common.DeviceTypes import DeviceTypeEnum
 from common.proto.context_pb2 import (
-    ConfigActionEnum, Device, DeviceDriverEnum, DeviceId, DeviceList, DeviceOperationalStatusEnum, Empty, TopologyId)
-from common.tools.object_factory.Context import json_context_id
-from common.tools.object_factory.Topology import json_topology_id
+    ConfigActionEnum, Device, DeviceDriverEnum, DeviceId, DeviceList, DeviceOperationalStatusEnum, Empty)
+from common.tools.context_queries.Device import get_device
+from common.tools.context_queries.Topology import get_topology
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
-from webui.service.device.forms import AddDeviceForm
-from common.DeviceTypes import DeviceTypeEnum
-from webui.service.device.forms import ConfigForm
-from webui.service.device.forms import UpdateDeviceForm
+from webui.service.device.forms import AddDeviceForm, ConfigForm, UpdateDeviceForm
 
 device = Blueprint('device', __name__, url_prefix='/device')
 context_client = ContextClient()
@@ -39,17 +37,19 @@ def home():
     topology_uuid = session['topology_uuid']
 
     context_client.connect()
-    json_topo_id = json_topology_id(topology_uuid, context_id=json_context_id(context_uuid))
-    grpc_topology = context_client.GetTopology(TopologyId(**json_topo_id))
-    topo_device_uuids = {device_id.device_uuid.uuid for device_id in grpc_topology.device_ids}
-    grpc_devices: DeviceList = context_client.ListDevices(Empty())
+    grpc_topology = get_topology(context_client, topology_uuid, context_uuid=context_uuid, rw_copy=False)
+    if grpc_topology is None:
+        flash('Context({:s})/Topology({:s}) not found'.format(str(context_uuid), str(topology_uuid)), 'danger')
+        devices = []
+    else:
+        topo_device_uuids = {device_id.device_uuid.uuid for device_id in grpc_topology.device_ids}
+        grpc_devices: DeviceList = context_client.ListDevices(Empty())
+        devices = [
+            device for device in grpc_devices.devices
+            if device.device_id.device_uuid.uuid in topo_device_uuids
+        ]
     context_client.close()
 
-    devices = [
-        device for device in grpc_devices.devices
-        if device.device_id.device_uuid.uuid in topo_device_uuids
-    ]
-
     return render_template(
         'device/home.html', devices=devices, dde=DeviceDriverEnum,
         dose=DeviceOperationalStatusEnum)
@@ -71,23 +71,23 @@ def add():
     if form.validate_on_submit():
         device_obj = Device()
         # Device UUID: 
-        device_obj.device_id.device_uuid.uuid = form.device_id.data
+        device_obj.device_id.device_uuid.uuid = form.device_id.data # pylint: disable=no-member
 
         # Device type: 
         device_obj.device_type = str(form.device_type.data)
 
         # Device configurations: 
-        config_rule = device_obj.device_config.config_rules.add()
+        config_rule = device_obj.device_config.config_rules.add() # pylint: disable=no-member
         config_rule.action = ConfigActionEnum.CONFIGACTION_SET
         config_rule.custom.resource_key = '_connect/address'
         config_rule.custom.resource_value = form.device_config_address.data
 
-        config_rule = device_obj.device_config.config_rules.add()
+        config_rule = device_obj.device_config.config_rules.add() # pylint: disable=no-member
         config_rule.action = ConfigActionEnum.CONFIGACTION_SET
         config_rule.custom.resource_key = '_connect/port'
         config_rule.custom.resource_value = form.device_config_port.data
 
-        config_rule = device_obj.device_config.config_rules.add()
+        config_rule = device_obj.device_config.config_rules.add() # pylint: disable=no-member
         config_rule.action = ConfigActionEnum.CONFIGACTION_SET
         config_rule.custom.resource_key = '_connect/settings'
 
@@ -105,20 +105,22 @@ def add():
         device_obj.device_operational_status = form.operational_status.data
 
         # Device drivers: 
+        device_drivers = list()
         if form.device_drivers_undefined.data:
-            device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_UNDEFINED)
+            device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_UNDEFINED)
         if form.device_drivers_openconfig.data:
-            device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG)
+            device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG)
         if form.device_drivers_transport_api.data:
-            device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API)
+            device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API)
         if form.device_drivers_p4.data:
-            device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_P4)
+            device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_P4)
         if form.device_drivers_ietf_network_topology.data:
-            device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY)
+            device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY)
         if form.device_drivers_onf_tr_352.data:
-            device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352)
+            device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352)
         if form.device_drivers_xr.data:
-            device_obj.device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_XR)
+            device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_XR)
+        device_obj.device_drivers.extend(device_drivers) # pylint: disable=no-member
 
         try:
             device_client.connect()
@@ -126,7 +128,7 @@ def add():
             device_client.close()
             flash(f'New device was created with ID "{response.device_uuid.uuid}".', 'success')
             return redirect(url_for('device.home'))
-        except Exception as e:
+        except Exception as e: # pylint: disable=broad-except
             flash(f'Problem adding the device. {e.details()}', 'danger')
         
     return render_template('device/add.html', form=form,
@@ -134,14 +136,15 @@ def add():
 
 @device.route('detail/<path:device_uuid>', methods=['GET', 'POST'])
 def detail(device_uuid: str):
-    request = DeviceId()
-    request.device_uuid.uuid = device_uuid
     context_client.connect()
-    response = context_client.GetDevice(request)
+    device_obj = get_device(context_client, device_uuid, rw_copy=False)
+    if device_obj is None:
+        flash('Device({:s}) not found'.format(str(device_uuid)), 'danger')
+        device_obj = Device()
     context_client.close()
-    return render_template('device/detail.html', device=response,
-                                                 dde=DeviceDriverEnum,
-                                                 dose=DeviceOperationalStatusEnum)
+
+    return render_template(
+        'device/detail.html', device=device_obj, dde=DeviceDriverEnum, dose=DeviceOperationalStatusEnum)
 
 @device.get('<path:device_uuid>/delete')
 def delete(device_uuid):
@@ -154,13 +157,13 @@ def delete(device_uuid):
         # TODO: finalize implementation
 
         request = DeviceId()
-        request.device_uuid.uuid = device_uuid
+        request.device_uuid.uuid = device_uuid # pylint: disable=no-member
         device_client.connect()
-        response = device_client.DeleteDevice(request)
+        device_client.DeleteDevice(request)
         device_client.close()
 
         flash(f'Device "{device_uuid}" deleted successfully!', 'success')
-    except Exception as e:
+    except Exception as e: # pylint: disable=broad-except
         flash(f'Problem deleting device "{device_uuid}": {e.details()}', 'danger')
         current_app.logger.exception(e)
     return redirect(url_for('device.home'))
@@ -169,25 +172,25 @@ def delete(device_uuid):
 def addconfig(device_uuid):
     form = ConfigForm()
     request = DeviceId()
-    request.device_uuid.uuid = device_uuid
+    request.device_uuid.uuid = device_uuid # pylint: disable=no-member
     context_client.connect()
     response = context_client.GetDevice(request)
     context_client.close()
 
     if form.validate_on_submit():
-        device = Device()
-        device.CopyFrom(response)
-        config_rule = device.device_config.config_rules.add()
+        device_obj = Device()
+        device_obj.CopyFrom(response)
+        config_rule = device_obj.device_config.config_rules.add() # pylint: disable=no-member
         config_rule.action = ConfigActionEnum.CONFIGACTION_SET
         config_rule.custom.resource_key = form.device_key_config.data
         config_rule.custom.resource_value = form.device_value_config.data
         try:
             device_client.connect()
-            response: DeviceId = device_client.ConfigureDevice(device)
+            response: DeviceId = device_client.ConfigureDevice(device_obj)
             device_client.close()
             flash(f'New configuration was created with ID "{response.device_uuid.uuid}".', 'success')
             return redirect(url_for('device.home'))
-        except Exception as e:
+        except Exception as e: # pylint: disable=broad-except
              flash(f'Problem adding the device. {e.details()}', 'danger')
 
     return render_template('device/addconfig.html', form=form,  submit_text='Add New Configuration')
@@ -203,28 +206,29 @@ def updateconfig():
 def update(device_uuid):
     form = UpdateDeviceForm()
     request = DeviceId()
-    request.device_uuid.uuid = device_uuid
+    request.device_uuid.uuid = device_uuid # pylint: disable=no-member
     context_client.connect()
     response = context_client.GetDevice(request)
     context_client.close()
 
     # listing enum values
     form.update_operational_status.choices = []
-    for key, value in DeviceOperationalStatusEnum.DESCRIPTOR.values_by_name.items():
-        form.update_operational_status.choices.append((DeviceOperationalStatusEnum.Value(key), key.replace('DEVICEOPERATIONALSTATUS_', '')))
+    for key, _ in DeviceOperationalStatusEnum.DESCRIPTOR.values_by_name.items():
+        item = (DeviceOperationalStatusEnum.Value(key), key.replace('DEVICEOPERATIONALSTATUS_', ''))
+        form.update_operational_status.choices.append(item)
 
     form.update_operational_status.default = response.device_operational_status
 
     if form.validate_on_submit():
-        device = Device()
-        device.CopyFrom(response)
-        device.device_operational_status = form.update_operational_status.data
+        device_obj = Device()
+        device_obj.CopyFrom(response)
+        device_obj.device_operational_status = form.update_operational_status.data
         try:
             device_client.connect()
-            response: DeviceId = device_client.ConfigureDevice(device)
+            response: DeviceId = device_client.ConfigureDevice(device_obj)
             device_client.close()
             flash(f'Status of device with ID "{response.device_uuid.uuid}" was updated.', 'success')
             return redirect(url_for('device.home'))
-        except Exception as e:
+        except Exception as e: # pylint: disable=broad-except
              flash(f'Problem updating the device. {e.details()}', 'danger')  
     return render_template('device/update.html', device=response, form=form, submit_text='Update Device')
diff --git a/src/webui/service/link/routes.py b/src/webui/service/link/routes.py
index 9324ad0be..0fda8958e 100644
--- a/src/webui/service/link/routes.py
+++ b/src/webui/service/link/routes.py
@@ -14,10 +14,10 @@
 
 
 from flask import render_template, Blueprint, flash, session, redirect, url_for
-from common.proto.context_pb2 import Empty, LinkId, LinkList, TopologyId
+from common.proto.context_pb2 import Empty, Link, LinkList
 from common.tools.context_queries.EndPoint import get_endpoint_names
-from common.tools.object_factory.Context import json_context_id
-from common.tools.object_factory.Topology import json_topology_id
+from common.tools.context_queries.Link import get_link
+from common.tools.context_queries.Topology import get_topology
 from context.client.ContextClient import ContextClient
 
 
@@ -33,20 +33,21 @@ def home():
     context_uuid = session['context_uuid']
     topology_uuid = session['topology_uuid']
 
+    links, endpoint_ids = list(), list()
+    device_names, endpoints_data = dict(), dict()
+
     context_client.connect()
-    json_topo_id = json_topology_id(topology_uuid, context_id=json_context_id(context_uuid))
-    grpc_topology = context_client.GetTopology(TopologyId(**json_topo_id))
-    topo_link_uuids = {link_id.link_uuid.uuid for link_id in grpc_topology.link_ids}
-    grpc_links: LinkList = context_client.ListLinks(Empty())
-
-    endpoint_ids = []
-    links = []
-    for link_ in grpc_links.links:
-        if link_.link_id.link_uuid.uuid not in topo_link_uuids: continue
-        links.append(link_)
-        endpoint_ids.extend(link_.link_endpoint_ids)
-
-    device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+    grpc_topology = get_topology(context_client, topology_uuid, context_uuid=context_uuid, rw_copy=False)
+    if grpc_topology is None:
+        flash('Context({:s})/Topology({:s}) not found'.format(str(context_uuid), str(topology_uuid)), 'danger')
+    else:
+        topo_link_uuids = {link_id.link_uuid.uuid for link_id in grpc_topology.link_ids}
+        grpc_links: LinkList = context_client.ListLinks(Empty())
+        for link_ in grpc_links.links:
+            if link_.link_id.link_uuid.uuid not in topo_link_uuids: continue
+            links.append(link_)
+            endpoint_ids.extend(link_.link_endpoint_ids)
+        device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
     context_client.close()
 
     return render_template('link/home.html', links=links, device_names=device_names, endpoints_data=endpoints_data)
@@ -54,10 +55,13 @@ def home():
 
 @link.route('detail/<path:link_uuid>', methods=('GET', 'POST'))
 def detail(link_uuid: str):
-    request = LinkId()
-    request.link_uuid.uuid = link_uuid  # pylint: disable=no-member
     context_client.connect()
-    response = context_client.GetLink(request)
-    device_names, endpoints_data = get_endpoint_names(context_client, response.link_endpoint_ids)
+    link_obj = get_link(context_client, link_uuid, rw_copy=False)
+    if link_obj is None:
+        flash('Link({:s}) not found'.format(str(link_uuid)), 'danger')
+        link_obj = Link()
+        device_names, endpoints_data = dict(), dict()
+    else:
+        device_names, endpoints_data = get_endpoint_names(context_client, link_obj.link_endpoint_ids)
     context_client.close()
-    return render_template('link/detail.html',link=response, device_names=device_names, endpoints_data=endpoints_data)
+    return render_template('link/detail.html',link=link_obj, device_names=device_names, endpoints_data=endpoints_data)
diff --git a/src/webui/service/service/routes.py b/src/webui/service/service/routes.py
index ee9b092ae..defbe2cb0 100644
--- a/src/webui/service/service/routes.py
+++ b/src/webui/service/service/routes.py
@@ -14,8 +14,11 @@
 
 import grpc
 from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for
-from common.proto.context_pb2 import ContextId, Service, ServiceId, ServiceTypeEnum, ServiceStatusEnum, Connection
+from common.proto.context_pb2 import (
+    IsolationLevelEnum, Service, ServiceId, ServiceTypeEnum, ServiceStatusEnum, Connection)
+from common.tools.context_queries.Context import get_context
 from common.tools.context_queries.EndPoint import get_endpoint_names
+from common.tools.context_queries.Service import get_service
 from context.client.ContextClient import ContextClient
 from service.client.ServiceClient import ServiceClient
 
@@ -26,93 +29,94 @@ service_client = ServiceClient()
 
 @service.get('/')
 def home():
-    # flash('This is an info message', 'info')
-    # flash('This is a danger message', 'danger')
-
-    context_uuid = session.get('context_uuid', '-')
-    if context_uuid == "-":
+    if 'context_uuid' not in session or 'topology_uuid' not in session:
         flash("Please select a context!", "warning")
         return redirect(url_for("main.home"))
-    request = ContextId()
-    request.context_uuid.uuid = context_uuid
+    context_uuid = session['context_uuid']
+
     context_client.connect()
-    try:
-        service_list = context_client.ListServices(request)
-        # print(service_list)
-        services = service_list.services
-        context_found = True
-    except grpc.RpcError as e:
-        if e.code() != grpc.StatusCode.NOT_FOUND: raise
-        if e.details() != 'Context({:s}) not found'.format(context_uuid): raise
-        services = []
-        context_found = False
-
-    if context_found:
-        endpoint_ids = []
-        for service_ in services:
-            endpoint_ids.extend(service_.service_endpoint_ids)
-        device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+
+    context_obj = get_context(context_client, context_uuid, rw_copy=False)
+    if context_obj is None:
+        flash('Context({:s}) not found'.format(str(context_uuid)), 'danger')
+        services, device_names, endpoints_data = list(), list(), list()
     else:
-        device_names, endpoints_data = [],[]
+        try:
+            services = context_client.ListServices(context_obj.context_id)
+            services = services.services
+        except grpc.RpcError as e:
+            if e.code() != grpc.StatusCode.NOT_FOUND: raise
+            if e.details() != 'Context({:s}) not found'.format(context_uuid): raise
+            services, device_names, endpoints_data = list(), dict(), dict()
+        else:
+            endpoint_ids = list()
+            for service_ in services:
+                endpoint_ids.extend(service_.service_endpoint_ids)
+            device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
 
     context_client.close()
     return render_template(
         'service/home.html', services=services, device_names=device_names, endpoints_data=endpoints_data,
-        context_not_found=not context_found, ste=ServiceTypeEnum, sse=ServiceStatusEnum)
+        ste=ServiceTypeEnum, sse=ServiceStatusEnum)
 
 
 @service.route('add', methods=['GET', 'POST'])
 def add():
     flash('Add service route called', 'danger')
     raise NotImplementedError()
-    return render_template('service/home.html')
+    #return render_template('service/home.html')
 
 
 @service.get('<path:service_uuid>/detail')
 def detail(service_uuid: str):
-    context_uuid = session.get('context_uuid', '-')
-    if context_uuid == "-":
+    if 'context_uuid' not in session or 'topology_uuid' not in session:
         flash("Please select a context!", "warning")
         return redirect(url_for("main.home"))
-    
-    request: ServiceId = ServiceId()
-    request.service_uuid.uuid = service_uuid
-    request.context_id.context_uuid.uuid = context_uuid
+    context_uuid = session['context_uuid']
+
     try:
         context_client.connect()
-        response: Service = context_client.GetService(request)
-        connections: Connection = context_client.ListConnections(request)
-        connections = connections.connections
 
-        endpoint_ids = []
-        endpoint_ids.extend(response.service_endpoint_ids)
-        for connection in connections:
-            endpoint_ids.extend(connection.path_hops_endpoint_ids)
-        device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+        endpoint_ids = list()
+        service_obj = get_service(context_client, service_uuid, rw_copy=False)
+        if service_obj is None:
+            flash('Context({:s})/Service({:s}) not found'.format(str(context_uuid), str(service_uuid)), 'danger')
+            service_obj = Service()
+        else:
+            endpoint_ids.extend(service_obj.service_endpoint_ids)
+            connections: Connection = context_client.ListConnections(service_obj.service_id)
+            connections = connections.connections
+            for connection in connections: endpoint_ids.extend(connection.path_hops_endpoint_ids)
+
+        if len(endpoint_ids) > 0:
+            device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+        else:
+            device_names, endpoints_data = dict(), dict()
 
         context_client.close()
+
+        return render_template(
+            'service/detail.html', service=service_obj, connections=connections, device_names=device_names,
+            endpoints_data=endpoints_data, ste=ServiceTypeEnum, sse=ServiceStatusEnum, ile=IsolationLevelEnum)
     except Exception as e:
         flash('The system encountered an error and cannot show the details of this service.', 'warning')
         current_app.logger.exception(e)
         return redirect(url_for('service.home'))
-    return render_template(
-        'service/detail.html', service=response, connections=connections, device_names=device_names,
-        endpoints_data=endpoints_data, ste=ServiceTypeEnum, sse=ServiceStatusEnum)
 
 
 @service.get('<path:service_uuid>/delete')
 def delete(service_uuid: str):
-    context_uuid = session.get('context_uuid', '-')
-    if context_uuid == "-":
+    if 'context_uuid' not in session or 'topology_uuid' not in session:
         flash("Please select a context!", "warning")
         return redirect(url_for("main.home"))
+    context_uuid = session['context_uuid']
 
     try:
         request = ServiceId()
         request.service_uuid.uuid = service_uuid
         request.context_id.context_uuid.uuid = context_uuid
         service_client.connect()
-        response = service_client.DeleteService(request)
+        service_client.DeleteService(request)
         service_client.close()
 
         flash('Service "{:s}" deleted successfully!'.format(service_uuid), 'success')
diff --git a/src/webui/service/slice/routes.py b/src/webui/service/slice/routes.py
index 222508418..cd1b672d5 100644
--- a/src/webui/service/slice/routes.py
+++ b/src/webui/service/slice/routes.py
@@ -11,11 +11,13 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-#
+
 import grpc
 from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for
-from common.proto.context_pb2 import ContextId, Slice, SliceId, SliceStatusEnum
+from common.proto.context_pb2 import IsolationLevelEnum, Slice, SliceId, SliceStatusEnum
+from common.tools.context_queries.Context import get_context
 from common.tools.context_queries.EndPoint import get_endpoint_names
+from common.tools.context_queries.Slice import get_slice
 from context.client.ContextClient import ContextClient
 from slice.client.SliceClient import SliceClient
 
@@ -26,92 +28,88 @@ slice_client = SliceClient()
 
 @slice.get('/')
 def home():
-    context_uuid = session.get('context_uuid', '-')
-    if context_uuid == "-":
+    if 'context_uuid' not in session or 'topology_uuid' not in session:
         flash("Please select a context!", "warning")
         return redirect(url_for("main.home"))
-    request = ContextId()
-    request.context_uuid.uuid = context_uuid
+    context_uuid = session['context_uuid']
+
     context_client.connect()
-    try:
-        slice_list = context_client.ListSlices(request)
-        slices = slice_list.slices
-        context_found = True
-    except grpc.RpcError as e:
-        if e.code() != grpc.StatusCode.NOT_FOUND: raise
-        if e.details() != 'Context({:s}) not found'.format(context_uuid): raise
-        slices = []
-        context_found = False
-
-    if context_found:
-        endpoint_ids = []
-        for slice_ in slices:
-            endpoint_ids.extend(slice_.slice_endpoint_ids)
-        device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+
+    context_obj = get_context(context_client, context_uuid, rw_copy=False)
+    if context_obj is None:
+        flash('Context({:s}) not found'.format(str(context_uuid)), 'danger')
+        device_names, endpoints_data = list(), list()
     else:
-        device_names, endpoints_data = [],[]
+        try:
+            slices = context_client.ListSlices(context_obj.context_id)
+            slices = slices.slices
+        except grpc.RpcError as e:
+            if e.code() != grpc.StatusCode.NOT_FOUND: raise
+            if e.details() != 'Context({:s}) not found'.format(context_uuid): raise
+            slices, device_names, endpoints_data = list(), dict(), dict()
+        else:
+            endpoint_ids = list()
+            for slice_ in slices:
+                endpoint_ids.extend(slice_.slice_endpoint_ids)
+            device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
 
     context_client.close()
-
     return render_template(
         'slice/home.html', slices=slices, device_names=device_names, endpoints_data=endpoints_data,
-        context_not_found=not context_found, sse=SliceStatusEnum)
+        sse=SliceStatusEnum)
 
 
 @slice.route('add', methods=['GET', 'POST'])
 def add():
     flash('Add slice route called', 'danger')
     raise NotImplementedError()
-    return render_template('slice/home.html')
+    #return render_template('slice/home.html')
 
 
 @slice.get('<path:slice_uuid>/detail')
 def detail(slice_uuid: str):
-    context_uuid = session.get('context_uuid', '-')
-    if context_uuid == "-":
+    if 'context_uuid' not in session or 'topology_uuid' not in session:
         flash("Please select a context!", "warning")
         return redirect(url_for("main.home"))
-    
-    request: SliceId = SliceId()
-    request.slice_uuid.uuid = slice_uuid
-    request.context_id.context_uuid.uuid = context_uuid
-    req = ContextId()
-    req.context_uuid.uuid = context_uuid
+    context_uuid = session['context_uuid']
+
     try:
         context_client.connect()
-        response: Slice = context_client.GetSlice(request)
-        services = context_client.ListServices(req)
 
-        endpoint_ids = []
-        endpoint_ids.extend(response.slice_endpoint_ids)
-        device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
+        slice_obj = get_slice(context_client, slice_uuid, rw_copy=False)
+        if slice_obj is None:
+            flash('Context({:s})/Slice({:s}) not found'.format(str(context_uuid), str(slice_uuid)), 'danger')
+            slice_obj = Slice()
+        else:
+            device_names, endpoints_data = get_endpoint_names(context_client, slice_obj.slice_endpoint_ids)
 
         context_client.close()
+
+        return render_template(
+            'slice/detail.html', slice=slice_obj, device_names=device_names, endpoints_data=endpoints_data,
+            sse=SliceStatusEnum, ile=IsolationLevelEnum)
     except Exception as e:
         flash('The system encountered an error and cannot show the details of this slice.', 'warning')
         current_app.logger.exception(e)
         return redirect(url_for('slice.home'))
-    return render_template(
-        'slice/detail.html', slice=response, device_names=device_names, endpoints_data=endpoints_data,
-        sse=SliceStatusEnum, services=services)
-
-#@slice.get('<path:slice_uuid>/delete')
-#def delete(slice_uuid: str):
-#    context_uuid = session.get('context_uuid', '-')
-#    if context_uuid == "-":
-#        flash("Please select a context!", "warning")
-#        return redirect(url_for("main.home"))
-#
-#    try:
-#        request = SliceId()
-#        request.slice_uuid.uuid = slice_uuid
-#        request.context_id.context_uuid.uuid = context_uuid
-#        slice_client.connect()
-#        response = slice_client.DeleteSlice(request)
-#        slice_client.close()
-#
-#        flash('Slice "{:s}" deleted successfully!'.format(slice_uuid), 'success')
-#    except Exception as e:
-#        flash('Problem deleting slice "{:s}": {:s}'.format(slice_uuid, str(e.details())), 'danger')
-#        current_app.logger.exception(e) 
-#    return redirect(url_for('slice.home'))
+
+@slice.get('<path:slice_uuid>/delete')
+def delete(slice_uuid: str):
+    if 'context_uuid' not in session or 'topology_uuid' not in session:
+        flash("Please select a context!", "warning")
+        return redirect(url_for("main.home"))
+    context_uuid = session['context_uuid']
+
+    try:
+        request = SliceId()
+        request.slice_uuid.uuid = slice_uuid
+        request.context_id.context_uuid.uuid = context_uuid
+        slice_client.connect()
+        slice_client.DeleteSlice(request)
+        slice_client.close()
+
+        flash('Slice "{:s}" deleted successfully!'.format(slice_uuid), 'success')
+    except Exception as e:
+        flash('Problem deleting slice "{:s}": {:s}'.format(slice_uuid, str(e.details())), 'danger')
+        current_app.logger.exception(e) 
+    return redirect(url_for('slice.home'))
diff --git a/src/webui/service/templates/base.html b/src/webui/service/templates/base.html
index 0aa022f14..35999ebe1 100644
--- a/src/webui/service/templates/base.html
+++ b/src/webui/service/templates/base.html
@@ -103,7 +103,7 @@
                 </li>
               </ul>
               <span class="navbar-text" style="color: #fff;">
-                Current Context(<b>{{ get_working_context() }}</b>)/Topology(<b>{{ get_working_topology() }}</b>)
+                Selected Context(<b>{{ get_working_context() }}</b>)/Topology(<b>{{ get_working_topology() }}</b>)
               </span>
             </div>
           </div>
diff --git a/src/webui/service/templates/device/detail.html b/src/webui/service/templates/device/detail.html
index de8bb4a81..1b4b43f5a 100644
--- a/src/webui/service/templates/device/detail.html
+++ b/src/webui/service/templates/device/detail.html
@@ -29,13 +29,14 @@
     <div class="col-sm-3">
         <a id="update" class="btn btn-secondary" href="{{ url_for('device.update',device_uuid=device.device_id.device_uuid.uuid) }}">
             <i class="bi bi-pencil-square"></i>
-            Update
+            Update device
         </a>
     </div>
     <div class="col-sm-3">
         <!-- <button type="button" class="btn btn-danger"><i class="bi bi-x-square"></i>Delete device</button> -->
         <button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal">
-            <i class="bi bi-x-square"></i>Delete device
+            <i class="bi bi-x-square"></i>
+            Delete device
         </button>
     </div>
 </div>
diff --git a/src/webui/service/templates/service/detail.html b/src/webui/service/templates/service/detail.html
index b21606951..d99ede3e0 100644
--- a/src/webui/service/templates/service/detail.html
+++ b/src/webui/service/templates/service/detail.html
@@ -36,7 +36,8 @@
     <div class="col-sm-3">
         <!-- <button type="button" class="btn btn-danger"><i class="bi bi-x-square"></i>Delete service</button> -->
         <button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal">
-            <i class="bi bi-x-square"></i>Delete service
+            <i class="bi bi-x-square"></i>
+            Delete service
         </button>
     </div>
 </div>
@@ -87,7 +88,7 @@
     <thead>
         <tr>
             <th scope="col">Kind</th>
-            <th scope="col">Type</th>
+            <th scope="col">Key/Type</th>
             <th scope="col">Value</th>
         </tr>
     </thead>
@@ -135,15 +136,43 @@
             </td>
             <td>{{ constraint.endpoint_priority.priority }}</td>
         </tr>
+        {% elif constraint.WhichOneof('constraint')=='sla_capacity' %}
+        <tr>
+            <td>SLA Capacity</td>
+            <td>-</td>
+            <td>
+                {{ constraint.sla_capacity.capacity_gbps }} Gbps
+            </td>
+        </tr>
+        {% elif constraint.WhichOneof('constraint')=='sla_latency' %}
+        <tr>
+            <td>SLA E2E Latency</td>
+            <td>-</td>
+            <td>
+                {{ constraint.sla_latency.e2e_latency_ms }} ms
+            </td>
+        </tr>
         {% elif constraint.WhichOneof('constraint')=='sla_availability' %}
         <tr>
             <td>SLA Availability</td>
             <td>-</td>
             <td>
+                {{ constraint.sla_availability.availability }} %;
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
                 {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
         </tr>
+        {% elif constraint.WhichOneof('constraint')=='sla_isolation' %}
+        <tr>
+            <td>SLA Isolation</td>
+            <td>-</td>
+            <td>
+                {% for i,isolation_level in enumerate(constraint.sla_isolation.isolation_level) %}
+                    {% if i > 0 %}, {% endif %}
+                    {{ ile.Name(isolation_level) }}
+                {% endfor %}
+            </td>
+        </tr>
         {% else %}
         <tr>
             <td>-</td>
@@ -185,34 +214,12 @@
         {% endfor %}
     </tbody>
 </table>
-<!-- Modal -->
-<div class="modal fade" id="deleteModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
-    aria-labelledby="staticBackdropLabel" aria-hidden="true">
-    <div class="modal-dialog">
-        <div class="modal-content">
-            <div class="modal-header">
-                <h5 class="modal-title" id="staticBackdropLabel">Delete service?</h5>
-                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
-            </div>
-            <div class="modal-body">
-                Are you sure you want to delete the service "{{ service.service_id.service_uuid.uuid }}"?
-            </div>
-            <div class="modal-footer">
-                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">No</button>
-                <a type="button" class="btn btn-danger"
-                    href="{{ url_for('service.delete', service_uuid=service.service_id.service_uuid.uuid) }}"><i
-                        class="bi bi-exclamation-diamond"></i>Yes</a>
-            </div>
-        </div>
-    </div>
-</div>
-
 
 <table class="table table-striped table-hover">
     <thead>
         <tr>
             <th scope="col">Connection Id</th>
-            <th scope="col">Sub-service</th>
+            <th scope="col">Sub-Service</th>
             <th scope="col">Path</th>
         </tr>
     </thead>
@@ -258,8 +265,26 @@
     </tbody>
 </table>
 
+<!-- Modal -->
+<div class="modal fade" id="deleteModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
+    aria-labelledby="staticBackdropLabel" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="staticBackdropLabel">Delete service?</h5>
+                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+            </div>
+            <div class="modal-body">
+                Are you sure you want to delete the service "{{ service.service_id.service_uuid.uuid }}"?
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">No</button>
+                <a type="button" class="btn btn-danger"
+                    href="{{ url_for('service.delete', service_uuid=service.service_id.service_uuid.uuid) }}"><i
+                        class="bi bi-exclamation-diamond"></i>Yes</a>
+            </div>
+        </div>
+    </div>
+</div>
 
-
-
-
-{% endblock %}
\ No newline at end of file
+{% endblock %}
diff --git a/src/webui/service/templates/slice/detail.html b/src/webui/service/templates/slice/detail.html
index 390f882d7..6c8d15aed 100644
--- a/src/webui/service/templates/slice/detail.html
+++ b/src/webui/service/templates/slice/detail.html
@@ -32,14 +32,14 @@
             <i class="bi bi-pencil-square"></i>
             Update
         </a>
-    </div>
-    <div class="col-sm-3">-->
+    </div>-->
+    <div class="col-sm-3">
         <!-- <button type="button" class="btn btn-danger"><i class="bi bi-x-square"></i>Delete slice</button> -->
-        <!--<button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal">
-            <i class="bi bi-x-square"></i>Delete slice
+        <button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal">
+            <i class="bi bi-x-square"></i>
+            Delete slice
         </button>
     </div>
-    -->
 </div>
 
 <div class="row mb-3">
@@ -88,7 +88,7 @@
     <thead>
         <tr>
             <th scope="col">Kind</th>
-            <th scope="col">Type</th>
+            <th scope="col">Key/Type</th>
             <th scope="col">Value</th>
         </tr>
     </thead>
@@ -136,15 +136,43 @@
             </td>
             <td>{{ constraint.endpoint_priority.priority }}</td>
         </tr>
+        {% elif constraint.WhichOneof('constraint')=='sla_capacity' %}
+        <tr>
+            <td>SLA Capacity</td>
+            <td>-</td>
+            <td>
+                {{ constraint.sla_capacity.capacity_gbps }} Gbps
+            </td>
+        </tr>
+        {% elif constraint.WhichOneof('constraint')=='sla_latency' %}
+        <tr>
+            <td>SLA E2E Latency</td>
+            <td>-</td>
+            <td>
+                {{ constraint.sla_latency.e2e_latency_ms }} ms
+            </td>
+        </tr>
         {% elif constraint.WhichOneof('constraint')=='sla_availability' %}
         <tr>
             <td>SLA Availability</td>
             <td>-</td>
             <td>
+                {{ constraint.sla_availability.availability }} %;
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
                 {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
         </tr>
+        {% elif constraint.WhichOneof('constraint')=='sla_isolation' %}
+        <tr>
+            <td>SLA Isolation</td>
+            <td>-</td>
+            <td>
+                {% for i,isolation_level in enumerate(constraint.sla_isolation.isolation_level) %}
+                    {% if i > 0 %}, {% endif %}
+                    {{ ile.Name(isolation_level) }}
+                {% endfor %}
+            </td>
+        </tr>
         {% else %}
         <tr>
             <td>-</td>
@@ -191,7 +219,7 @@
         <table class="table table-striped table-hover">
             <thead>
                 <tr>
-                    <th scope="col">Service Id</th>
+                    <th scope="col">Sub-Services</th>
                 </tr>
             </thead>
             <tbody>
@@ -219,7 +247,7 @@
         <table class="table table-striped table-hover">
             <thead>
                 <tr>
-                    <th scope="col">Sub-slices</th>
+                    <th scope="col">Sub-Slices</th>
                 </tr>
             </thead>
             <tbody>
@@ -244,4 +272,27 @@
         </table>
     </div>
 </div>
-{% endblock %}
\ No newline at end of file
+
+<!-- Modal -->
+<div class="modal fade" id="deleteModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1"
+    aria-labelledby="staticBackdropLabel" aria-hidden="true">
+    <div class="modal-dialog">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title" id="staticBackdropLabel">Delete slice?</h5>
+                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+            </div>
+            <div class="modal-body">
+                Are you sure you want to delete the slice "{{ slice.slice_id.slice_uuid.uuid }}"?
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">No</button>
+                <a type="button" class="btn btn-danger"
+                    href="{{ url_for('slice.delete', slice_uuid=slice.slice_id.slice_uuid.uuid) }}"><i
+                        class="bi bi-exclamation-diamond"></i>Yes</a>
+            </div>
+        </div>
+    </div>
+</div>
+
+{% endblock %}
-- 
GitLab


From 0beaad33b6820da381c0d40c776897e05f72f5b9 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:08:57 +0000
Subject: [PATCH 046/229] Deploy script:

- added check ignore-not-exists in delete namespace
---
 deploy/tfs.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/deploy/tfs.sh b/deploy/tfs.sh
index b9bcbab4d..1f62adcd5 100755
--- a/deploy/tfs.sh
+++ b/deploy/tfs.sh
@@ -85,7 +85,7 @@ TMP_LOGS_FOLDER="$TMP_FOLDER/logs"
 mkdir -p $TMP_LOGS_FOLDER
 
 echo "Deleting and Creating a new namespace..."
-kubectl delete namespace $TFS_K8S_NAMESPACE
+kubectl delete namespace $TFS_K8S_NAMESPACE --ignore-not-found
 kubectl create namespace $TFS_K8S_NAMESPACE
 printf "\n"
 
-- 
GitLab


From 198096862eb4c33b16ae228258a54eaca9f4a775 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:15:17 +0000
Subject: [PATCH 047/229] Context component:

- corrected management of Isolation Level SLA Contraints
---
 src/context/service/database/Constraint.py     |  2 +-
 .../service/database/models/ConstraintModel.py | 18 ++++++++++--------
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/src/context/service/database/Constraint.py b/src/context/service/database/Constraint.py
index 0540841c3..768108d9b 100644
--- a/src/context/service/database/Constraint.py
+++ b/src/context/service/database/Constraint.py
@@ -66,7 +66,7 @@ def compose_constraints_data(
             constraint_name = '{:s}:{:s}:{:s}'.format(parent_kind, kind.value, endpoint_uuid)
         elif kind in {
             ConstraintKindEnum.SCHEDULE, ConstraintKindEnum.SLA_CAPACITY, ConstraintKindEnum.SLA_LATENCY,
-            ConstraintKindEnum.SLA_AVAILABILITY, ConstraintKindEnum.SLA_ISOLATION_LEVEL
+            ConstraintKindEnum.SLA_AVAILABILITY, ConstraintKindEnum.SLA_ISOLATION
         }:
             constraint_name = '{:s}:{:s}:'.format(parent_kind, kind.value)
         else:
diff --git a/src/context/service/database/models/ConstraintModel.py b/src/context/service/database/models/ConstraintModel.py
index 01c7bcb76..e9660d502 100644
--- a/src/context/service/database/models/ConstraintModel.py
+++ b/src/context/service/database/models/ConstraintModel.py
@@ -19,15 +19,17 @@ from typing import Dict
 from ._Base import _Base
 
 # Enum values should match name of field in Constraint message
+# - enum item name should be Constraint message type in upper case
+# - enum item value should be Constraint message type as it is in the proto files
 class ConstraintKindEnum(enum.Enum):
-    CUSTOM              = 'custom'
-    SCHEDULE            = 'schedule'
-    ENDPOINT_LOCATION   = 'endpoint_location'
-    ENDPOINT_PRIORITY   = 'endpoint_priority'
-    SLA_CAPACITY        = 'sla_capacity'
-    SLA_LATENCY         = 'sla_latency'
-    SLA_AVAILABILITY    = 'sla_availability'
-    SLA_ISOLATION_LEVEL = 'sla_isolation'
+    CUSTOM            = 'custom'
+    SCHEDULE          = 'schedule'
+    ENDPOINT_LOCATION = 'endpoint_location'
+    ENDPOINT_PRIORITY = 'endpoint_priority'
+    SLA_CAPACITY      = 'sla_capacity'
+    SLA_LATENCY       = 'sla_latency'
+    SLA_AVAILABILITY  = 'sla_availability'
+    SLA_ISOLATION     = 'sla_isolation'
 
 class ConstraintModel(_Base):
     __tablename__ = 'constraint'
-- 
GitLab


From ddf424f1985cb526fa9710a5916a4d6df0de33d0 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:18:06 +0000
Subject: [PATCH 048/229] WebUI component:

- partial revert of change in templates
---
 src/webui/service/templates/service/detail.html | 1 -
 src/webui/service/templates/slice/detail.html   | 1 -
 2 files changed, 2 deletions(-)

diff --git a/src/webui/service/templates/service/detail.html b/src/webui/service/templates/service/detail.html
index d99ede3e0..b267f986c 100644
--- a/src/webui/service/templates/service/detail.html
+++ b/src/webui/service/templates/service/detail.html
@@ -157,7 +157,6 @@
             <td>SLA Availability</td>
             <td>-</td>
             <td>
-                {{ constraint.sla_availability.availability }} %;
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
                 {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
diff --git a/src/webui/service/templates/slice/detail.html b/src/webui/service/templates/slice/detail.html
index 6c8d15aed..2c1b55afb 100644
--- a/src/webui/service/templates/slice/detail.html
+++ b/src/webui/service/templates/slice/detail.html
@@ -157,7 +157,6 @@
             <td>SLA Availability</td>
             <td>-</td>
             <td>
-                {{ constraint.sla_availability.availability }} %;
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
                 {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
-- 
GitLab


From ffa4efdd71b8515fccc34dedb984197211b837d5 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:19:55 +0000
Subject: [PATCH 049/229] Proto:

- extended Constraint_SLA_Availability with field availability
---
 proto/context.proto | 1 +
 1 file changed, 1 insertion(+)

diff --git a/proto/context.proto b/proto/context.proto
index e403c4a22..49d16229c 100644
--- a/proto/context.proto
+++ b/proto/context.proto
@@ -509,6 +509,7 @@ message Constraint_SLA_Capacity {
 message Constraint_SLA_Availability {
   uint32 num_disjoint_paths = 1;
   bool all_active = 2;
+  float availability = 3; // 0.0 .. 100.0 percentage of availability
 }
 
 enum IsolationLevelEnum {
-- 
GitLab


From 643ae39a06a21b5a74a3003e34a017e3478a8d7b Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:20:37 +0000
Subject: [PATCH 050/229] WebUI component:

- extended Constraint_SLA_Availability with field availability
---
 src/webui/service/templates/service/detail.html | 1 +
 src/webui/service/templates/slice/detail.html   | 1 +
 2 files changed, 2 insertions(+)

diff --git a/src/webui/service/templates/service/detail.html b/src/webui/service/templates/service/detail.html
index b267f986c..d99ede3e0 100644
--- a/src/webui/service/templates/service/detail.html
+++ b/src/webui/service/templates/service/detail.html
@@ -157,6 +157,7 @@
             <td>SLA Availability</td>
             <td>-</td>
             <td>
+                {{ constraint.sla_availability.availability }} %;
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
                 {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
diff --git a/src/webui/service/templates/slice/detail.html b/src/webui/service/templates/slice/detail.html
index 2c1b55afb..6c8d15aed 100644
--- a/src/webui/service/templates/slice/detail.html
+++ b/src/webui/service/templates/slice/detail.html
@@ -157,6 +157,7 @@
             <td>SLA Availability</td>
             <td>-</td>
             <td>
+                {{ constraint.sla_availability.availability }} %;
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
                 {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
-- 
GitLab


From d78a15f1da26c88c55daf715bca6db9efb5579cf Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:21:30 +0000
Subject: [PATCH 051/229] Proto:

- implemented enhanced methods to control load generator form WebUI
---
 proto/load_generator.proto | 34 ++++++++++++++++++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/proto/load_generator.proto b/proto/load_generator.proto
index 98f6eefda..86f946958 100644
--- a/proto/load_generator.proto
+++ b/proto/load_generator.proto
@@ -18,6 +18,36 @@ package load_generator;
 import "context.proto";
 
 service LoadGeneratorService {
-  rpc Start(context.Empty) returns (context.Empty) {}
-  rpc Stop (context.Empty) returns (context.Empty) {}
+  rpc Start    (Parameters   ) returns (context.Empty) {}
+  rpc GetStatus(context.Empty) returns (Status       ) {}
+  rpc Stop     (context.Empty) returns (context.Empty) {}
+}
+
+enum RequestTypeEnum {
+  REQUESTTYPE_UNDEFINED    = 0;
+  REQUESTTYPE_SERVICE_L2NM = 1;
+  REQUESTTYPE_SERVICE_L3NM = 2;
+  REQUESTTYPE_SERVICE_MW   = 3;
+  REQUESTTYPE_SERVICE_TAPI = 4;
+  REQUESTTYPE_SLICE_L2NM   = 5;
+  REQUESTTYPE_SLICE_L3NM   = 6;
+}
+
+message Parameters {
+  uint64 num_requests = 1;  // if == 0, generate infinite requests
+  repeated RequestTypeEnum request_types = 2;
+  float offered_load = 3;
+  float holding_time = 4;
+  float inter_arrival_time = 5;
+  bool do_teardown = 6;
+  bool dry_mode = 7;
+  bool record_to_dlt = 8;
+  string dlt_domain_id = 9;
+}
+
+message Status {
+  Parameters parameters = 1;
+  uint64 num_generated = 2;
+  bool infinite_loop = 3;
+  bool running = 4;
 }
-- 
GitLab


From 73efb256970cf507b9ca09763bdd292beebd1e7b Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:23:28 +0000
Subject: [PATCH 052/229] Load Generator component:

- Updated client class methods according to proto
- RequestScheduler: added methods to report status
- Extended servicer class to support parametrization
---
 .../client/LoadGeneratorClient.py             | 10 ++-
 .../load_gen/RequestScheduler.py              | 19 ++++--
 src/load_generator/service/Constants.py       | 27 ++++++++
 .../LoadGeneratorServiceServicerImpl.py       | 65 +++++++++++++------
 4 files changed, 95 insertions(+), 26 deletions(-)
 create mode 100644 src/load_generator/service/Constants.py

diff --git a/src/load_generator/client/LoadGeneratorClient.py b/src/load_generator/client/LoadGeneratorClient.py
index 99626bbbb..2bed40dfd 100644
--- a/src/load_generator/client/LoadGeneratorClient.py
+++ b/src/load_generator/client/LoadGeneratorClient.py
@@ -16,6 +16,7 @@ import grpc, logging
 from common.Constants import ServiceNameEnum
 from common.Settings import get_service_host, get_service_port_grpc
 from common.proto.context_pb2 import Empty
+from common.proto.load_generator_pb2 import Parameters, Status
 from common.proto.load_generator_pb2_grpc import LoadGeneratorServiceStub
 from common.tools.client.RetryDecorator import retry, delay_exponential
 from common.tools.grpc.Tools import grpc_message_to_json_string
@@ -46,12 +47,19 @@ class LoadGeneratorClient:
         self.stub = None
 
     @RETRY_DECORATOR
-    def Start(self, request : Empty) -> Empty:
+    def Start(self, request : Parameters) -> Empty:
         LOGGER.debug('Start request: {:s}'.format(grpc_message_to_json_string(request)))
         response = self.stub.Start(request)
         LOGGER.debug('Start result: {:s}'.format(grpc_message_to_json_string(response)))
         return response
 
+    @RETRY_DECORATOR
+    def GetStatus(self, request : Empty) -> Status:
+        LOGGER.debug('GetStatus request: {:s}'.format(grpc_message_to_json_string(request)))
+        response = self.stub.GetStatus(request)
+        LOGGER.debug('GetStatus result: {:s}'.format(grpc_message_to_json_string(response)))
+        return response
+
     @RETRY_DECORATOR
     def Stop(self, request : Empty) -> Empty:
         LOGGER.debug('Stop request: {:s}'.format(grpc_message_to_json_string(request)))
diff --git a/src/load_generator/load_gen/RequestScheduler.py b/src/load_generator/load_gen/RequestScheduler.py
index 775da1580..e1003376a 100644
--- a/src/load_generator/load_gen/RequestScheduler.py
+++ b/src/load_generator/load_gen/RequestScheduler.py
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import copy, logging, pytz, random
+import copy, logging, pytz, random, threading
 from apscheduler.executors.pool import ThreadPoolExecutor
 from apscheduler.jobstores.memory import MemoryJobStore
 from apscheduler.schedulers.blocking import BlockingScheduler
@@ -46,13 +46,22 @@ class RequestScheduler:
             timezone=pytz.utc)
         self._parameters = parameters
         self._generator = generator
+        self._running = threading.Event()
+
+    @property
+    def num_generated(self): return max(0, self._generator.num_requests_generated - 1) # first increases, then checks
+
+    @property
+    def infinite_loop(self): return self._parameters.num_requests == 0
+
+    @property
+    def running(self): return self._running.is_set()
 
     def _schedule_request_setup(self) -> None:
-        infinite_loop = self._parameters.num_requests == 0
-        num_requests_generated = self._generator.num_requests_generated - 1 # because it first increases, then checks
-        if not infinite_loop and (num_requests_generated >= self._parameters.num_requests):
+        if not self.infinite_loop and (self.num_generated >= self._parameters.num_requests):
             LOGGER.info('Generation Done!')
             #self._scheduler.shutdown()
+            self._running.clear()
             return
         iat = random.expovariate(1.0 / self._parameters.inter_arrival_time)
         run_date = datetime.utcnow() + timedelta(seconds=iat)
@@ -66,11 +75,13 @@ class RequestScheduler:
             self._request_teardown, args=(request,), trigger='date', run_date=run_date, timezone=pytz.utc)
 
     def start(self):
+        self._running.set()
         self._schedule_request_setup()
         self._scheduler.start()
 
     def stop(self):
         self._scheduler.shutdown()
+        self._running.clear()
 
     def _request_setup(self) -> None:
         self._schedule_request_setup()
diff --git a/src/load_generator/service/Constants.py b/src/load_generator/service/Constants.py
new file mode 100644
index 000000000..6c339877c
--- /dev/null
+++ b/src/load_generator/service/Constants.py
@@ -0,0 +1,27 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 common.proto.load_generator_pb2 import RequestTypeEnum
+from load_generator.load_gen.Constants import RequestType
+
+REQUEST_TYPE_MAP = {
+    RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM : RequestType.SERVICE_L2NM,
+    RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM : RequestType.SERVICE_L3NM,
+    RequestTypeEnum.REQUESTTYPE_SERVICE_MW   : RequestType.SERVICE_MW,
+    RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI : RequestType.SERVICE_TAPI,
+    RequestTypeEnum.REQUESTTYPE_SLICE_L2NM   : RequestType.SLICE_L2NM,
+    RequestTypeEnum.REQUESTTYPE_SLICE_L3NM   : RequestType.SLICE_L3NM,
+}
+
+REQUEST_TYPE_REVERSE_MAP = {v:k for k,v in REQUEST_TYPE_MAP.items()}
diff --git a/src/load_generator/service/LoadGeneratorServiceServicerImpl.py b/src/load_generator/service/LoadGeneratorServiceServicerImpl.py
index c280581dd..d66b0b2c1 100644
--- a/src/load_generator/service/LoadGeneratorServiceServicerImpl.py
+++ b/src/load_generator/service/LoadGeneratorServiceServicerImpl.py
@@ -12,43 +12,39 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from typing import Optional
 import grpc, logging
+from typing import Optional
 from apscheduler.schedulers.background import BackgroundScheduler
 from common.proto.context_pb2 import Empty
+from common.proto.load_generator_pb2 import Parameters, Status
 from common.proto.load_generator_pb2_grpc import LoadGeneratorServiceServicer
-from load_generator.load_gen.Constants import RequestType
-from load_generator.load_gen.Parameters import Parameters
+from load_generator.load_gen.Parameters import Parameters as LoadGen_Parameters
 from load_generator.load_gen.RequestGenerator import RequestGenerator
 from load_generator.load_gen.RequestScheduler import RequestScheduler
+from .Constants import REQUEST_TYPE_MAP, REQUEST_TYPE_REVERSE_MAP
 
 LOGGER = logging.getLogger(__name__)
 
 class LoadGeneratorServiceServicerImpl(LoadGeneratorServiceServicer):
     def __init__(self):
         LOGGER.debug('Creating Servicer...')
-        self._parameters = Parameters(
-            num_requests = 100,
-            request_types = [
-                RequestType.SERVICE_L2NM,
-                RequestType.SERVICE_L3NM,
-                #RequestType.SERVICE_MW,
-                #RequestType.SERVICE_TAPI,
-                RequestType.SLICE_L2NM,
-                RequestType.SLICE_L3NM,
-            ],
-            offered_load  = 50,
-            holding_time  = 10,
-            do_teardown   = True,
-            dry_mode      = False,           # in dry mode, no request is sent to TeraFlowSDN
-            record_to_dlt = False,           # if record_to_dlt, changes in device/link/service/slice are uploaded to DLT
-            dlt_domain_id = 'dlt-perf-eval', # domain used to uploaded entities, ignored when record_to_dlt = False
-        )
         self._generator : Optional[RequestGenerator] = None
         self._scheduler : Optional[RequestScheduler] = None
         LOGGER.debug('Servicer Created')
 
-    def Start(self, request : Empty, context : grpc.ServicerContext) -> Empty:
+    def Start(self, request : Parameters, context : grpc.ServicerContext) -> Empty:
+        self._parameters = LoadGen_Parameters(
+            num_requests       = request.num_requests,
+            request_types      = [REQUEST_TYPE_MAP[rt] for rt in request.request_types],
+            offered_load       = request.offered_load if request.offered_load > 1.e-12 else None,
+            holding_time       = request.holding_time if request.holding_time > 1.e-12 else None,
+            inter_arrival_time = request.inter_arrival_time if request.inter_arrival_time > 1.e-12 else None,
+            do_teardown        = request.do_teardown,   # if set, schedule tear down of requests
+            dry_mode           = request.dry_mode,      # in dry mode, no request is sent to TeraFlowSDN
+            record_to_dlt      = request.record_to_dlt, # if set, upload changes to DLT
+            dlt_domain_id      = request.dlt_domain_id, # domain used to uploaded entities (when record_to_dlt = True)
+        )
+
         LOGGER.info('Initializing Generator...')
         self._generator = RequestGenerator(self._parameters)
         self._generator.initialize()
@@ -58,6 +54,33 @@ class LoadGeneratorServiceServicerImpl(LoadGeneratorServiceServicer):
         self._scheduler.start()
         return Empty()
 
+    def GetStatus(self, request : Empty, context : grpc.ServicerContext) -> Status:
+        if self._scheduler is None:
+            # not started
+            status = Status()
+            status.num_generated = 0
+            status.infinite_loop = False
+            status.running       = False
+            return status
+
+        params = self._scheduler._parameters
+        request_types = [REQUEST_TYPE_REVERSE_MAP[rt] for rt in params.request_types]
+
+        status = Status()
+        status.num_generated = self._scheduler.num_generated
+        status.infinite_loop = self._scheduler.infinite_loop
+        status.running       = self._scheduler.running
+        status.parameters.num_requests       = params.num_requests          # pylint: disable=no-member
+        status.parameters.offered_load       = params.offered_load          # pylint: disable=no-member
+        status.parameters.holding_time       = params.holding_time          # pylint: disable=no-member
+        status.parameters.inter_arrival_time = params.inter_arrival_time    # pylint: disable=no-member
+        status.parameters.do_teardown        = params.do_teardown           # pylint: disable=no-member
+        status.parameters.dry_mode           = params.dry_mode              # pylint: disable=no-member
+        status.parameters.record_to_dlt      = params.record_to_dlt         # pylint: disable=no-member
+        status.parameters.dlt_domain_id      = params.dlt_domain_id         # pylint: disable=no-member
+        status.parameters.request_types.extend(request_types)               # pylint: disable=no-member
+        return status
+
     def Stop(self, request : Empty, context : grpc.ServicerContext) -> Empty:
         if self._scheduler is not None:
             self._scheduler.stop()
-- 
GitLab


From b6fdf507b6828cb2f3eced035cb5a7633fd9e0ec Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:25:14 +0000
Subject: [PATCH 053/229] WebUI component:

- added section to control load generator
- updated basic Debug API endpoints
---
 src/webui/service/load_gen/forms.py           |  45 +++++
 src/webui/service/load_gen/routes.py          | 109 +++++++++---
 src/webui/service/templates/base.html         |   8 +-
 .../service/templates/load_gen/home.html      | 164 ++++++++++++++++++
 src/webui/service/templates/main/debug.html   |  26 +--
 5 files changed, 307 insertions(+), 45 deletions(-)
 create mode 100644 src/webui/service/load_gen/forms.py
 create mode 100644 src/webui/service/templates/load_gen/home.html

diff --git a/src/webui/service/load_gen/forms.py b/src/webui/service/load_gen/forms.py
new file mode 100644
index 000000000..3144fbe5d
--- /dev/null
+++ b/src/webui/service/load_gen/forms.py
@@ -0,0 +1,45 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 flask_wtf import FlaskForm
+from wtforms import BooleanField, FloatField, IntegerField, StringField, SubmitField
+from wtforms.validators import DataRequired, NumberRange
+
+class LoadGenStartForm(FlaskForm):
+    num_requests = IntegerField('Num Requests', default=100, validators=[DataRequired(), NumberRange(min=0)])
+    num_generated = IntegerField('Num Generated', render_kw={'readonly': True})
+
+    request_type_service_l2nm = BooleanField('Service L2NM', default=False)
+    request_type_service_l3nm = BooleanField('Service L3NM', default=False)
+    request_type_service_mw = BooleanField('Service MW', default=False)
+    request_type_service_tapi = BooleanField('Service TAPI', default=False)
+    request_type_slice_l2nm = BooleanField('Slice L2NM', default=True)
+    request_type_slice_l3nm = BooleanField('Slice L3NM', default=False)
+
+    offered_load = FloatField('Offered Load [Erlang]', default=50, validators=[NumberRange(min=1.e-12)])
+    holding_time = FloatField('Holding Time [seconds]', default=10, validators=[NumberRange(min=1.e-12)])
+    inter_arrival_time = FloatField('Inter Arrival Time[seconds]', default=0, validators=[NumberRange(min=1.e-12)])
+
+    do_teardown = BooleanField('Do Teardown', default=True)
+
+    record_to_dlt = BooleanField('Record to DLT', default=False)
+    dlt_domain_id = StringField('DLT Domain Id', default='')
+
+    infinite_loop = BooleanField('Infinite Loop', render_kw={'readonly': True})
+    running = BooleanField('Running', render_kw={'readonly': True})
+
+    submit = SubmitField('Start')
+
+class LoadGenStopForm(FlaskForm):
+    submit = SubmitField('Stop')
diff --git a/src/webui/service/load_gen/routes.py b/src/webui/service/load_gen/routes.py
index 3118b6de0..893900908 100644
--- a/src/webui/service/load_gen/routes.py
+++ b/src/webui/service/load_gen/routes.py
@@ -14,32 +14,93 @@
 
 from flask import render_template, Blueprint, flash
 from common.proto.context_pb2 import Empty
+from common.proto.load_generator_pb2 import Parameters, RequestTypeEnum
 from load_generator.client.LoadGeneratorClient import LoadGeneratorClient
+from .forms import LoadGenStartForm, LoadGenStopForm
 
 load_gen = Blueprint('load_gen', __name__, url_prefix='/load_gen')
 
-@load_gen.route('start', methods=['GET'])
-def start():
+@load_gen.route('home', methods=['GET', 'POST'])
+def home():
     load_gen_client = LoadGeneratorClient()
-    try:
-        load_gen_client.connect()
-        load_gen_client.Start(Empty())
-        load_gen_client.close()
-        flash('Load Generator Started.', 'success')
-    except Exception as e: # pylint: disable=broad-except
-        flash('Problem starting Load Generator. {:s}'.format(str(e)), 'danger')
-
-    return render_template('main/debug.html')
-
-@load_gen.route('stop', methods=['GET'])
-def stop():
-    load_gen_client = LoadGeneratorClient()
-    try:
-        load_gen_client.connect()
-        load_gen_client.Stop(Empty())
-        load_gen_client.close()
-        flash('Load Generator Stoped.', 'success')
-    except Exception as e: # pylint: disable=broad-except
-        flash('Problem stopping Load Generator. {:s}'.format(str(e)), 'danger')
-
-    return render_template('main/debug.html')
+
+    form_start = LoadGenStartForm()
+    form_stop = LoadGenStopForm()
+
+    if form_start.validate_on_submit():
+        load_gen_params = Parameters()
+        load_gen_params.num_requests       = form_start.num_requests.data
+        load_gen_params.offered_load       = form_start.offered_load.data
+        load_gen_params.holding_time       = form_start.holding_time.data
+        load_gen_params.inter_arrival_time = form_start.inter_arrival_time.data
+        load_gen_params.do_teardown        = form_start.do_teardown.data
+        load_gen_params.dry_mode           = False
+        load_gen_params.record_to_dlt      = form_start.record_to_dlt.data
+        load_gen_params.dlt_domain_id      = form_start.dlt_domain_id.data
+
+        del load_gen_params.request_types[:] # pylint: disable=no-member
+        request_types = list()
+        if form_start.request_type_service_l2nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM)
+        if form_start.request_type_service_l3nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM)
+        if form_start.request_type_service_mw  .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_MW  )
+        if form_start.request_type_service_tapi.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI)
+        if form_start.request_type_slice_l2nm  .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L2NM  )
+        if form_start.request_type_slice_l3nm  .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L3NM  )
+        load_gen_params.request_types.extend(request_types) # pylint: disable=no-member
+
+        try:
+            load_gen_client.connect()
+            load_gen_client.Start(load_gen_params)
+            load_gen_client.close()
+            flash('Load Generator Started.', 'success')
+        except Exception as e: # pylint: disable=broad-except
+            flash('Problem starting Load Generator. {:s}'.format(str(e)), 'danger')
+
+    if form_stop.validate_on_submit():
+        try:
+            load_gen_client.connect()
+            load_gen_client.Stop(Empty())
+            load_gen_client.close()
+            flash('Load Generator Stoped.', 'success')
+        except Exception as e: # pylint: disable=broad-except
+            flash('Problem stopping Load Generator. {:s}'.format(str(e)), 'danger')
+
+    load_gen_client.connect()
+    status = load_gen_client.GetStatus(Empty())
+    load_gen_client.close()
+
+    form_start.num_requests      .default = status.parameters.num_requests
+    form_start.offered_load      .default = status.parameters.offered_load
+    form_start.holding_time      .default = status.parameters.holding_time
+    form_start.inter_arrival_time.default = status.parameters.inter_arrival_time
+    form_start.do_teardown       .default = status.parameters.do_teardown
+    form_start.record_to_dlt     .default = status.parameters.record_to_dlt
+    form_start.dlt_domain_id     .default = status.parameters.dlt_domain_id
+    form_start.num_generated     .default = status.num_generated
+    form_start.infinite_loop     .default = status.infinite_loop
+    form_start.running           .default = status.running
+
+    request_types = status.parameters.request_types
+    form_start.request_type_service_l2nm.default = RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM in request_types
+    form_start.request_type_service_l3nm.default = RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM in request_types
+    form_start.request_type_service_mw  .default = RequestTypeEnum.REQUESTTYPE_SERVICE_MW   in request_types
+    form_start.request_type_service_tapi.default = RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI in request_types
+    form_start.request_type_slice_l2nm  .default = RequestTypeEnum.REQUESTTYPE_SLICE_L2NM   in request_types
+    form_start.request_type_slice_l3nm  .default = RequestTypeEnum.REQUESTTYPE_SLICE_L3NM   in request_types
+
+    form_start.num_requests      .render_kw['readonly'] = status.running
+    form_start.offered_load      .render_kw['readonly'] = status.running
+    form_start.holding_time      .render_kw['readonly'] = status.running
+    form_start.inter_arrival_time.render_kw['readonly'] = status.running
+    form_start.do_teardown       .render_kw['readonly'] = status.running
+    form_start.record_to_dlt     .render_kw['readonly'] = status.running
+    form_start.dlt_domain_id     .render_kw['readonly'] = status.running
+
+    form_start.request_type_service_l2nm.render_kw['readonly'] = status.running
+    form_start.request_type_service_l3nm.render_kw['readonly'] = status.running
+    form_start.request_type_service_mw  .render_kw['readonly'] = status.running
+    form_start.request_type_service_tapi.render_kw['readonly'] = status.running
+    form_start.request_type_slice_l2nm  .render_kw['readonly'] = status.running
+    form_start.request_type_slice_l3nm  .render_kw['readonly'] = status.running
+
+    return render_template('load_gen/home.html', form_start=form_start, form_stop=form_stop)
diff --git a/src/webui/service/templates/base.html b/src/webui/service/templates/base.html
index 35999ebe1..1dfa36871 100644
--- a/src/webui/service/templates/base.html
+++ b/src/webui/service/templates/base.html
@@ -86,10 +86,16 @@
                 <li class="nav-item">
                   <a class="nav-link" href="/grafana" id="grafana_link" target="grafana">Grafana</a>
                 </li>
-  
                 <li class="nav-item">
                   <a class="nav-link" href="{{ url_for('main.debug') }}">Debug</a>
                 </li>
+                <li class="nav-item">
+                  {% if '/load-gen/' in request.path %}
+                  <a class="nav-link active" aria-current="page" href="{{ url_for('load_gen.home') }}">Load Generator</a>
+                  {% else %}
+                  <a class="nav-link" href="{{ url_for('load_gen.home') }}">Load Generator</a>
+                  {% endif %}
+                </li>
   
                 <!-- <li class="nav-item">
                   <a class="nav-link" href="#">Context</a>
diff --git a/src/webui/service/templates/load_gen/home.html b/src/webui/service/templates/load_gen/home.html
new file mode 100644
index 000000000..5aa751392
--- /dev/null
+++ b/src/webui/service/templates/load_gen/home.html
@@ -0,0 +1,164 @@
+<!--
+ Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+{% extends 'base.html' %}
+
+{% block content %}
+    <h1>Load Generator</h1>
+    <br />
+
+    <form id="load_gen_start" method="POST">
+        {{ form_start.hidden_tag() }}
+        <fieldset>
+            <div class="row mb-3">
+                {{ form_start.num_requests.label(class="col-sm-2 col-form-label") }}
+                <div class="col-sm-10">
+                    {% if form_start.num_requests.errors %}
+                        {{ form_start.num_requests(class="form-control is-invalid") }}
+                        <div class="invalid-feedback">
+                            {% for error in form_start.num_requests.errors %}<span>{{ error }}</span>{% endfor %}
+                        </div>
+                    {% else %}
+                        {{ form_start.num_requests(class="form-control") }}
+                    {% endif %}
+                </div>
+            </div>
+            <br />
+
+            <div class="row mb-3">
+                {{ form_start.num_generated.label(class="col-sm-2 col-form-label") }}
+                <div class="col-sm-10">
+                    {% if form_start.num_generated.errors %}
+                        {{ form_start.num_generated(class="form-control is-invalid") }}
+                        <div class="invalid-feedback">
+                            {% for error in form_start.num_generated.errors %}<span>{{ error }}</span>{% endfor %}
+                        </div>
+                    {% else %}
+                        {{ form_start.num_generated(class="form-control") }}
+                    {% endif %}
+                </div>
+            </div>
+            <br />
+
+            <div class="row mb-3">
+                <div class="col-sm-2 col-form-label">Service Types:</div>
+                <div class="col-sm-10">
+                    {{ form_start.request_type_service_l2nm }} {{ form_start.request_type_service_l2nm.label(class="col-sm-3 col-form-label") }}
+                    {{ form_start.request_type_service_l3nm }} {{ form_start.request_type_service_l3nm.label(class="col-sm-3 col-form-label") }}
+                    {{ form_start.request_type_service_mw   }} {{ form_start.request_type_service_mw  .label(class="col-sm-3 col-form-label") }}
+                    {{ form_start.request_type_service_tapi }} {{ form_start.request_type_service_tapi.label(class="col-sm-3 col-form-label") }}
+                    {{ form_start.request_type_slice_l2nm   }} {{ form_start.request_type_slice_l2nm  .label(class="col-sm-3 col-form-label") }}
+                    {{ form_start.request_type_slice_l3nm   }} {{ form_start.request_type_slice_l3nm  .label(class="col-sm-3 col-form-label") }}
+                </div>
+            </div>
+            <br />
+
+            <div class="row mb-3">
+                {{ form_start.offered_load.label(class="col-sm-2 col-form-label") }}
+                <div class="col-sm-10">
+                    {% if form_start.offered_load.errors %}
+                        {{ form_start.offered_load(class="form-control is-invalid") }}
+                        <div class="invalid-feedback">
+                            {% for error in form_start.offered_load.errors %}<span>{{ error }}</span>{% endfor %}
+                        </div>
+                    {% else %}
+                        {{ form_start.offered_load(class="form-control") }}
+                    {% endif %}
+                </div>
+            </div>
+            <br />
+
+            <div class="row mb-3">
+                {{ form_start.holding_time.label(class="col-sm-2 col-form-label") }}
+                <div class="col-sm-10">
+                    {% if form_start.holding_time.errors %}
+                        {{ form_start.holding_time(class="form-control is-invalid") }}
+                        <div class="invalid-feedback">
+                            {% for error in form_start.holding_time.errors %}<span>{{ error }}</span>{% endfor %}
+                        </div>
+                    {% else %}
+                        {{ form_start.holding_time(class="form-control") }}
+                    {% endif %}
+                </div>
+            </div>
+            <br />
+
+            <div class="row mb-3">
+                {{ form_start.inter_arrival_time.label(class="col-sm-2 col-form-label") }}
+                <div class="col-sm-10">
+                    {% if form_start.inter_arrival_time.errors %}
+                        {{ form_start.inter_arrival_time(class="form-control is-invalid") }}
+                        <div class="invalid-feedback">
+                            {% for error in form_start.inter_arrival_time.errors %}<span>{{ error }}</span>{% endfor %}
+                        </div>
+                    {% else %}
+                        {{ form_start.inter_arrival_time(class="form-control") }}
+                    {% endif %}
+                </div>
+            </div>
+            <br />
+
+            <div class="row mb-3">
+                {{ form_start.do_teardown(class="form-control") }} {{ form_start.do_teardown.label(class="col-sm-2 col-form-label") }}
+            </div>
+            <br />
+
+            <div class="row mb-3">
+                {{ form_start.record_to_dlt(class="form-control") }} {{ form_start.record_to_dlt.label(class="col-sm-2 col-form-label") }}
+            </div>
+            <br />
+
+            <div class="row mb-3">
+                {{ form_start.dlt_domain_id.label(class="col-sm-2 col-form-label") }}
+                <div class="col-sm-10">
+                    {% if form_start.dlt_domain_id.errors %}
+                        {{ form_start.dlt_domain_id(class="form-control is-invalid") }}
+                        <div class="invalid-feedback">
+                            {% for error in form_start.dlt_domain_id.errors %}<span>{{ error }}</span>{% endfor %}
+                        </div>
+                    {% else %}
+                        {{ form_start.dlt_domain_id(class="form-control") }}
+                    {% endif %}
+                </div>
+            </div>
+            <br />
+
+            <div class="row mb-3">
+                {{ form_start.infinite_loop(class="form-control") }} {{ form_start.infinite_loop.label(class="col-sm-2 col-form-label") }}
+            </div>
+            <br />
+
+            <div class="row mb-3">
+                {{ form_start.running(class="form-control") }} {{ form_start.running.label(class="col-sm-2 col-form-label") }}
+            </div>
+            <br />
+
+            <div class="d-grid gap-2 d-md-flex justify-content-md-start">
+                {{ form_start.submit(class="btn btn-primary") }}
+            </div>
+        </fieldset>
+    </form>
+
+    <form id="load_gen_stop" method="POST">
+        {{ form_stop.hidden_tag() }}
+        <fieldset>
+            <div class="d-grid gap-2 d-md-flex justify-content-md-start">
+                {{ form_stop.submit(class="btn btn-primary") }}
+            </div>
+        </fieldset>
+    </form>
+
+{% endblock %}
diff --git a/src/webui/service/templates/main/debug.html b/src/webui/service/templates/main/debug.html
index 11a868fdf..eef42ae9a 100644
--- a/src/webui/service/templates/main/debug.html
+++ b/src/webui/service/templates/main/debug.html
@@ -17,26 +17,12 @@
 {% extends 'base.html' %}
 
 {% block content %}
-    <h1>Debug</h1>
+    <h1>Debug API</h1>
 
-    <!--
-        <h3>Dump ContextDB:</h3>
-        <ul>
-            <li>
-                <a class="nav-link" href="/context/api/dump/html" id="context_html_link" target="context_html">
-                    as HTML
-                </a>
-            </li>
-            <li>
-                <a class="nav-link" href="/context/api/dump/text" id="context_text_link" target="context_text">
-                    as Text
-                </a>
-            </li>
-        </ul>
-    -->
-
-    <h3>Load Generator:</h3>
-    <a href="{{ url_for('load_gen.start') }}" class="btn btn-primary" style="margin-bottom: 10px;">Start</a>
-    <a href="{{ url_for('load_gen.stop') }}" class="btn btn-primary" style="margin-bottom: 10px;">Stop</a>
+    <ul>
+        <li><a class="nav-link" href="/restconf/debug-api/contexts" id="contexts_link" target="contexts">Contexts</a></li>
+        <li><a class="nav-link" href="/restconf/debug-api/devices" id="devices_link" target="devices">Devices</a></li>
+        <li><a class="nav-link" href="/restconf/debug-api/links" id="links_link" target="links">Links</a></li>
+    </ul>
 
 {% endblock %}
-- 
GitLab


From d7961f7572fb6c39fdb40eff1a11c1908a544475 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:33:03 +0000
Subject: [PATCH 054/229] Common - Descriptor Loader tool:

- added support for dictionary and file-based loading of descriptors
- added getter methods
- added validation and unload methods
- integrated helper methods
- updated documentation
---
 src/common/tests/LoadScenario.py      |  50 --------
 src/common/tools/descriptor/Loader.py | 157 ++++++++++++++++++++++----
 2 files changed, 133 insertions(+), 74 deletions(-)
 delete mode 100644 src/common/tests/LoadScenario.py

diff --git a/src/common/tests/LoadScenario.py b/src/common/tests/LoadScenario.py
deleted file mode 100644
index 93cf3708c..000000000
--- a/src/common/tests/LoadScenario.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import logging
-from common.tools.descriptor.Loader import DescriptorLoader, compose_notifications
-from context.client.ContextClient import ContextClient
-from device.client.DeviceClient import DeviceClient
-from service.client.ServiceClient import ServiceClient
-from slice.client.SliceClient import SliceClient
-
-LOGGER = logging.getLogger(__name__)
-LOGGERS = {
-    'success': LOGGER.info,
-    'danger' : LOGGER.error,
-    'error'  : LOGGER.error,
-}
-
-def load_scenario_from_descriptor(
-    descriptor_file : str, context_client : ContextClient, device_client : DeviceClient,
-    service_client : ServiceClient, slice_client : SliceClient
-) -> DescriptorLoader:
-    with open(descriptor_file, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(
-        descriptors,
-        context_client=context_client, device_client=device_client,
-        service_client=service_client, slice_client=slice_client)
-    results = descriptor_loader.process()
-
-    num_errors = 0
-    for message,level in compose_notifications(results):
-        LOGGERS.get(level)(message)
-        if level != 'success': num_errors += 1
-    if num_errors > 0:
-        MSG = 'Failed to load descriptors in file {:s}'
-        raise Exception(MSG.format(str(descriptor_file)))
-
-    return descriptor_loader
\ No newline at end of file
diff --git a/src/common/tools/descriptor/Loader.py b/src/common/tools/descriptor/Loader.py
index 5972d425b..0e1d8c737 100644
--- a/src/common/tools/descriptor/Loader.py
+++ b/src/common/tools/descriptor/Loader.py
@@ -15,25 +15,30 @@
 # SDN controller descriptor loader
 
 # Usage example (WebUI):
-#    descriptors = json.loads(descriptors_data_from_client)
+#    descriptors = json.loads(
+#       descriptors=descriptors_data_from_client, num_workers=10,
+#       context_client=..., device_client=..., service_client=..., slice_client=...)
 #    descriptor_loader = DescriptorLoader(descriptors)
 #    results = descriptor_loader.process()
 #    for message,level in compose_notifications(results):
 #        flash(message, level)
 
 # Usage example (pytest):
-#    with open('path/to/descriptor.json', 'r', encoding='UTF-8') as f:
-#        descriptors = json.loads(f.read())
 #    descriptor_loader = DescriptorLoader(
-#       descriptors, context_client=..., device_client=..., service_client=..., slice_client=...)
+#       descriptors_file='path/to/descriptor.json', num_workers=10,
+#       context_client=..., device_client=..., service_client=..., slice_client=...)
 #    results = descriptor_loader.process()
-#    loggers = {'success': LOGGER.info, 'danger': LOGGER.error, 'error': LOGGER.error}
-#    for message,level in compose_notifications(results):
-#        loggers.get(level)(message)
+#    check_results(results, descriptor_loader)
+#    descriptor_loader.validate()
+#    # do test ...
+#    descriptor_loader.unload()
 
 import concurrent.futures, json, logging, operator
 from typing import Any, Dict, List, Optional, Tuple, Union
-from common.proto.context_pb2 import Connection, Context, Device, Link, Service, Slice, Topology
+from common.proto.context_pb2 import (
+    Connection, Context, ContextId, Device, DeviceId, Empty, Link, LinkId, Service, ServiceId, Slice, SliceId,
+    Topology, TopologyId)
+from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
 from service.client.ServiceClient import ServiceClient
@@ -44,6 +49,11 @@ from .Tools import (
     get_descriptors_add_topologies, split_devices_by_rules)
 
 LOGGER = logging.getLogger(__name__)
+LOGGERS = {
+    'success': LOGGER.info,
+    'danger' : LOGGER.error,
+    'error'  : LOGGER.error,
+}
 
 ENTITY_TO_TEXT = {
     # name   => singular,    plural
@@ -67,25 +77,26 @@ TypeResults = List[Tuple[str, str, int, List[str]]] # entity_name, action, num_o
 TypeNotification = Tuple[str, str] # message, level
 TypeNotificationList = List[TypeNotification]
 
-def compose_notifications(results : TypeResults) -> TypeNotificationList:
-    notifications = []
-    for entity_name, action_name, num_ok, error_list in results:
-        entity_name_singluar,entity_name_plural = ENTITY_TO_TEXT[entity_name]
-        action_infinitive, action_past = ACTION_TO_TEXT[action_name]
-        num_err = len(error_list)
-        for error in error_list:
-            notifications.append((f'Unable to {action_infinitive} {entity_name_singluar} {error}', 'error'))
-        if num_ok : notifications.append((f'{str(num_ok)} {entity_name_plural} {action_past}', 'success'))
-        if num_err: notifications.append((f'{str(num_err)} {entity_name_plural} failed', 'danger'))
-    return notifications
-
 class DescriptorLoader:
     def __init__(
-        self, descriptors : Union[str, Dict], num_workers : int = 1,
+        self, descriptors : Optional[Union[str, Dict]] = None, descriptors_file : Optional[str] = None,
+        num_workers : int = 1,
         context_client : Optional[ContextClient] = None, device_client : Optional[DeviceClient] = None,
         service_client : Optional[ServiceClient] = None, slice_client : Optional[SliceClient] = None
     ) -> None:
-        self.__descriptors = json.loads(descriptors) if isinstance(descriptors, str) else descriptors
+        if (descriptors is None) == (descriptors_file is None):
+            raise Exception('Exactly one of "descriptors" or "descriptors_file" is required')
+        
+        if descriptors_file is not None:
+            with open(descriptors_file, 'r', encoding='UTF-8') as f:
+                self.__descriptors = json.loads(f.read())
+            self.__descriptor_file_path = descriptors_file
+        else: # descriptors is not None
+            self.__descriptors = json.loads(descriptors) if isinstance(descriptors, str) else descriptors
+            self.__descriptor_file_path = '<dict>'
+
+        self.__num_workers = num_workers
+
         self.__dummy_mode  = self.__descriptors.get('dummy_mode' , False)
         self.__contexts    = self.__descriptors.get('contexts'   , [])
         self.__topologies  = self.__descriptors.get('topologies' , [])
@@ -95,8 +106,6 @@ class DescriptorLoader:
         self.__slices      = self.__descriptors.get('slices'     , [])
         self.__connections = self.__descriptors.get('connections', [])
 
-        self.__num_workers = num_workers
-
         self.__contexts_add   = None
         self.__topologies_add = None
         self.__devices_add    = None
@@ -111,6 +120,24 @@ class DescriptorLoader:
 
         self.__results : TypeResults = list()
 
+    @property
+    def descriptor_file_path(self) -> Optional[str]: return self.__descriptor_file_path
+
+    @property
+    def num_workers(self) -> int: return self.__num_workers
+
+    @property
+    def context_client(self) -> Optional[ContextClient]: return self.__ctx_cli
+
+    @property
+    def device_client(self) -> Optional[DeviceClient]: return self.__dev_cli
+
+    @property
+    def service_client(self) -> Optional[ServiceClient]: return self.__svc_cli
+
+    @property
+    def slice_client(self) -> Optional[SliceClient]: return self.__slc_cli
+
     @property
     def contexts(self) -> List[Dict]: return self.__contexts
 
@@ -269,3 +296,85 @@ class DescriptorLoader:
 
         error_list = [str_error for _,str_error in sorted(error_list, key=operator.itemgetter(0))]
         self.__results.append((entity_name, action_name, num_ok, error_list))
+
+    def validate(self) -> None:
+        self.__ctx_cli.connect()
+
+        contexts = self.__ctx_cli.ListContexts(Empty())
+        assert len(contexts.contexts) == self.num_contexts
+
+        for context_uuid, num_topologies in self.num_topologies.items():
+            response = self.__ctx_cli.ListTopologies(ContextId(**json_context_id(context_uuid)))
+            assert len(response.topologies) == num_topologies
+
+        response = self.__ctx_cli.ListDevices(Empty())
+        assert len(response.devices) == self.num_devices
+
+        response = self.__ctx_cli.ListLinks(Empty())
+        assert len(response.links) == self.num_links
+
+        for context_uuid, num_services in self.num_services.items():
+            response = self.__ctx_cli.ListServices(ContextId(**json_context_id(context_uuid)))
+            assert len(response.services) == num_services
+
+        for context_uuid, num_slices in self.num_slices.items():
+            response = self.__ctx_cli.ListSlices(ContextId(**json_context_id(context_uuid)))
+            assert len(response.slices) == num_slices
+
+    def unload(self) -> None:
+        self.__ctx_cli.connect()
+        self.__dev_cli.connect()
+        self.__svc_cli.connect()
+        self.__slc_cli.connect()
+
+        for _, slice_list in self.slices.items():
+            for slice_ in slice_list:
+                self.__slc_cli.DeleteSlice(SliceId(**slice_['slice_id']))
+
+        for _, service_list in self.services.items():
+            for service in service_list:
+                self.__svc_cli.DeleteService(ServiceId(**service['service_id']))
+
+        for link in self.links:
+            self.__ctx_cli.RemoveLink(LinkId(**link['link_id']))
+
+        for device in self.devices:
+            self.__dev_cli.DeleteDevice(DeviceId(**device['device_id']))
+
+        for _, topology_list in self.topologies.items():
+            for topology in topology_list:
+                self.__ctx_cli.RemoveTopology(TopologyId(**topology['topology_id']))
+
+        for context in self.contexts:
+            self.__ctx_cli.RemoveContext(ContextId(**context['context_id']))
+
+def compose_notifications(results : TypeResults) -> TypeNotificationList:
+    notifications = []
+    for entity_name, action_name, num_ok, error_list in results:
+        entity_name_singluar,entity_name_plural = ENTITY_TO_TEXT[entity_name]
+        action_infinitive, action_past = ACTION_TO_TEXT[action_name]
+        num_err = len(error_list)
+        for error in error_list:
+            notifications.append((f'Unable to {action_infinitive} {entity_name_singluar} {error}', 'error'))
+        if num_ok : notifications.append((f'{str(num_ok)} {entity_name_plural} {action_past}', 'success'))
+        if num_err: notifications.append((f'{str(num_err)} {entity_name_plural} failed', 'danger'))
+    return notifications
+
+def check_descriptor_load_results(results : TypeResults, descriptor_loader : DescriptorLoader) -> None:
+    num_errors = 0
+    for message,level in compose_notifications(results):
+        LOGGERS.get(level)(message)
+        if level != 'success': num_errors += 1
+    if num_errors > 0:
+        MSG = 'Failed to load descriptors from "{:s}"'
+        raise Exception(MSG.format(str(descriptor_loader.descriptor_file_path)))
+
+def validate_empty_scenario(context_client : ContextClient) -> None:
+    response = context_client.ListContexts(Empty())
+    assert len(response.contexts) == 0
+
+    response = context_client.ListDevices(Empty())
+    assert len(response.devices) == 0
+
+    response = context_client.ListLinks(Empty())
+    assert len(response.links) == 0
-- 
GitLab


From 57bfda9d2608fc875fd1fc24761ef081d8314d42 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:33:38 +0000
Subject: [PATCH 055/229] Tools - Load Scenario:

- updated according to new common load scenario tools
---
 src/tests/tools/load_scenario/__main__.py | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/tests/tools/load_scenario/__main__.py b/src/tests/tools/load_scenario/__main__.py
index 3559f778d..df1d5d8bf 100644
--- a/src/tests/tools/load_scenario/__main__.py
+++ b/src/tests/tools/load_scenario/__main__.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 import logging, sys
-from common.tests.LoadScenario import load_scenario_from_descriptor
+from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
 from service.client.ServiceClient import ServiceClient
@@ -29,7 +29,12 @@ def main():
     slice_client = SliceClient()
 
     LOGGER.info('Loading scenario...')
-    load_scenario_from_descriptor(sys.argv[1], context_client, device_client, service_client, slice_client)
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=sys.argv[1], context_client=context_client, device_client=device_client,
+        service_client=service_client, slice_client=slice_client)
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+    descriptor_loader.validate()
     LOGGER.info('Done!')
     return 0
 
-- 
GitLab


From 0066c66f09f7d50795eef2efb03deb0ca039136b Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:35:27 +0000
Subject: [PATCH 056/229] Tests:

- updated tests according to corrected load scenario tool
- updated benchmark/policy/tests
- updated ecoc22/tests
- updated ofc22/tests
---
 .../policy/tests/test_functional_bootstrap.py | 45 +++------
 .../policy/tests/test_functional_cleanup.py   | 68 ++++----------
 .../tests/test_functional_create_service.py   | 92 +++++++------------
 .../tests/test_functional_delete_service.py   | 91 +++++++-----------
 .../ecoc22/tests/test_functional_bootstrap.py | 48 ++--------
 .../ecoc22/tests/test_functional_cleanup.py   | 66 ++-----------
 .../tests/test_functional_create_service.py   | 54 ++---------
 .../tests/test_functional_delete_service.py   | 73 ++++-----------
 .../ofc22/tests/test_functional_bootstrap.py  | 46 ++--------
 .../ofc22/tests/test_functional_cleanup.py    | 66 ++-----------
 .../tests/test_functional_create_service.py   | 57 +++---------
 .../tests/test_functional_delete_service.py   | 71 ++++----------
 12 files changed, 190 insertions(+), 587 deletions(-)

diff --git a/src/tests/benchmark/policy/tests/test_functional_bootstrap.py b/src/tests/benchmark/policy/tests/test_functional_bootstrap.py
index 65c46b4eb..ca1882aaa 100644
--- a/src/tests/benchmark/policy/tests/test_functional_bootstrap.py
+++ b/src/tests/benchmark/policy/tests/test_functional_bootstrap.py
@@ -13,10 +13,10 @@
 # limitations under the License.
 
 import logging, time
+from common.Constants import DEFAULT_CONTEXT_NAME
 from common.proto.context_pb2 import ContextId, Empty
 from common.proto.monitoring_pb2 import KpiDescriptorList
-from common.tests.LoadScenario import load_scenario_from_descriptor
-from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -27,44 +27,25 @@ LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_scenario_bootstrap(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure database is empty -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
+    validate_empty_scenario(context_client)
 
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
-
-
-    # ----- Load Scenario ----------------------------------------------------------------------------------------------
-    descriptor_loader = load_scenario_from_descriptor(
-        DESCRIPTOR_FILE, context_client, device_client, None, None)
-
-
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+    descriptor_loader.validate()
 
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
 
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
 
 def test_scenario_kpis_created(
     context_client : ContextClient,         # pylint: disable=redefined-outer-name
diff --git a/src/tests/benchmark/policy/tests/test_functional_cleanup.py b/src/tests/benchmark/policy/tests/test_functional_cleanup.py
index e00c5ceee..122526840 100644
--- a/src/tests/benchmark/policy/tests/test_functional_cleanup.py
+++ b/src/tests/benchmark/policy/tests/test_functional_cleanup.py
@@ -13,9 +13,10 @@
 # limitations under the License.
 
 import logging
-from common.tools.descriptor.Loader import DescriptorLoader
+from common.Constants import DEFAULT_CONTEXT_NAME
+from common.proto.context_pb2 import ContextId
+from common.tools.descriptor.Loader import DescriptorLoader, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
-from common.proto.context_pb2 import ContextId, DeviceId, Empty, LinkId, TopologyId
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
 from tests.Fixtures import context_client, device_client    # pylint: disable=unused-import
@@ -24,57 +25,20 @@ LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
-
-def test_services_removed(
+def test_scenario_cleanup(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
-
-
-    # ----- Delete Links, Devices, Topologies, Contexts ----------------------------------------------------------------
-    for link in descriptor_loader.links:
-        context_client.RemoveLink(LinkId(**link['link_id']))
-
-    for device in descriptor_loader.devices:
-        device_client .DeleteDevice(DeviceId(**device['device_id']))
-
-    for context_uuid, topology_list in descriptor_loader.topologies.items():
-        for topology in topology_list:
-            context_client.RemoveTopology(TopologyId(**topology['topology_id']))
-
-    for context in descriptor_loader.contexts:
-        context_client.RemoveContext(ContextId(**context['context_id']))
-
-
-    # ----- List entities - Ensure database is empty again -------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
+
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    descriptor_loader.validate()
+    descriptor_loader.unload()
+    validate_empty_scenario(context_client)
diff --git a/src/tests/benchmark/policy/tests/test_functional_create_service.py b/src/tests/benchmark/policy/tests/test_functional_create_service.py
index 919f81979..dd7761f38 100644
--- a/src/tests/benchmark/policy/tests/test_functional_create_service.py
+++ b/src/tests/benchmark/policy/tests/test_functional_create_service.py
@@ -13,83 +13,61 @@
 # limitations under the License.
 
 import logging, random
-from common.DeviceTypes import DeviceTypeEnum
-from common.proto.context_pb2 import ContextId, Empty
+from common.Constants import DEFAULT_CONTEXT_NAME
+from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
 from common.tools.descriptor.Loader import DescriptorLoader
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from monitoring.client.MonitoringClient import MonitoringClient
-from tests.Fixtures import context_client, device_client, monitoring_client # pylint: disable=unused-import
+from tests.Fixtures import context_client, monitoring_client                    # pylint: disable=unused-import
 from tests.tools.mock_osm.MockOSM import MockOSM
-from .Fixtures import osm_wim # pylint: disable=unused-import
+from .Fixtures import osm_wim                                                   # pylint: disable=unused-import
 from .Objects import WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
-DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
-DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
-
 DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
 
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
 
-    # ----- Create Service ---------------------------------------------------------------------------------------------
+    # Create Connectivity Service
     service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
     osm_wim.get_connectivity_service_status(service_uuid)
 
-
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
-        assert len(response.services) == 2*num_services # OLS & L3NM => (L3NM + TAPI)
-
-        for service in response.services:
-            service_id = service.service_id
-            response = context_client.ListConnections(service_id)
-            LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
-                grpc_message_to_json_string(service_id), len(response.connections),
-                grpc_message_to_json_string(response)))
-            assert len(response.connections) == 1 # one connection per service
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
+
+    response = context_client.ListServices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+    assert len(response.services) == 2 # 1xL3NM + 1xTAPI
+
+    for service in response.services:
+        service_id = service.service_id
+        response = context_client.ListConnections(service_id)
+        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
+            grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
+
+        if service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM:
+            assert len(response.connections) == 1 # 1 connection per service
+        elif service.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
+            assert len(response.connections) == 1 # 1 connection per service
+        else:
+            str_service = grpc_message_to_json_string(service)
+            raise Exception('Unexpected ServiceType: {:s}'.format(str_service))
 
 
 def test_scenario_kpi_values_created(
diff --git a/src/tests/benchmark/policy/tests/test_functional_delete_service.py b/src/tests/benchmark/policy/tests/test_functional_delete_service.py
index 6f6ca6029..4fffc115e 100644
--- a/src/tests/benchmark/policy/tests/test_functional_delete_service.py
+++ b/src/tests/benchmark/policy/tests/test_functional_delete_service.py
@@ -14,86 +14,61 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.DeviceTypes import DeviceTypeEnum
-from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum
 from common.tools.descriptor.Loader import DescriptorLoader
-from common.tools.object_factory.Context import json_context_id
 from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from tests.Fixtures import context_client   # pylint: disable=unused-import
 from tests.tools.mock_osm.MockOSM import MockOSM
-from .Fixtures import osm_wim # pylint: disable=unused-import
-
+from .Fixtures import osm_wim               # pylint: disable=unused-import
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
-DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
-DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
-
 DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
-
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
 
-    descriptor_loader = DescriptorLoader(descriptors)
+    response = context_client.ListServices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+    assert len(response.services) == 2 # 1xL3NM + 1xTAPI
 
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    l3nm_service_uuids = set()
-    response = context_client.ListServices(ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)))
-    assert len(response.services) == 2 # OLS & L3NM => (L3NM + TAPI)
+    service_uuids = set()
     for service in response.services:
         service_id = service.service_id
+        response = context_client.ListConnections(service_id)
+        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
+            grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
 
         if service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM:
+            assert len(response.connections) == 1 # 1 connection per service
             service_uuid = service_id.service_uuid.uuid
-            l3nm_service_uuids.add(service_uuid)
+            service_uuids.add(service_uuid)
             osm_wim.conn_info[service_uuid] = {}
-
-        response = context_client.ListConnections(service_id)
-        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
-            grpc_message_to_json_string(service_id), len(response.connections),
-            grpc_message_to_json_string(response)))
-        assert len(response.connections) == 1 # one connection per service
+        elif service.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
+            assert len(response.connections) == 1 # 1 connection per service
+        else:
+            str_service = grpc_message_to_json_string(service)
+            raise Exception('Unexpected ServiceType: {:s}'.format(str_service))
 
     # Identify service to delete
-    assert len(l3nm_service_uuids) == 1  # assume a single L3NM service has been created
-    l3nm_service_uuid = set(l3nm_service_uuids).pop()
-
-
-    # ----- Delete Service ---------------------------------------------------------------------------------------------
-    osm_wim.delete_connectivity_service(l3nm_service_uuid)
-
-
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
+    assert len(service_uuids) == 1  # assume a single L3NM service has been created
+    service_uuid = set(service_uuids).pop()
 
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
+    # Delete Connectivity Service
+    osm_wim.delete_connectivity_service(service_uuid)
 
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
 
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
diff --git a/src/tests/ecoc22/tests/test_functional_bootstrap.py b/src/tests/ecoc22/tests/test_functional_bootstrap.py
index 3b7b5009c..05691d0b2 100644
--- a/src/tests/ecoc22/tests/test_functional_bootstrap.py
+++ b/src/tests/ecoc22/tests/test_functional_bootstrap.py
@@ -14,8 +14,8 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, Empty
-from common.tests.LoadScenario import load_scenario_from_descriptor
+from common.proto.context_pb2 import ContextId
+from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -31,45 +31,15 @@ def test_scenario_bootstrap(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure database is empty -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
+    validate_empty_scenario(context_client)
 
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+    descriptor_loader.validate()
 
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
-
-
-    # ----- Load Scenario ----------------------------------------------------------------------------------------------
-    descriptor_loader = load_scenario_from_descriptor(
-        DESCRIPTOR_FILE, context_client, device_client, None, None)
-
-
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
-
-    for context_uuid, _ in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == 0
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
diff --git a/src/tests/ecoc22/tests/test_functional_cleanup.py b/src/tests/ecoc22/tests/test_functional_cleanup.py
index 3e8b5ea65..088c19799 100644
--- a/src/tests/ecoc22/tests/test_functional_cleanup.py
+++ b/src/tests/ecoc22/tests/test_functional_cleanup.py
@@ -14,8 +14,8 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, DeviceId, Empty, LinkId, TopologyId
-from common.tools.descriptor.Loader import DescriptorLoader
+from common.proto.context_pb2 import ContextId
+from common.tools.descriptor.Loader import DescriptorLoader, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -27,64 +27,18 @@ LOGGER.setLevel(logging.DEBUG)
 DESCRIPTOR_FILE = 'ecoc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
-def test_services_removed(
+def test_scenario_cleanup(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
-
-    for context_uuid, _ in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == 0
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
 
-
-    # ----- Delete Links, Devices, Topologies, Contexts ----------------------------------------------------------------
-    for link in descriptor_loader.links:
-        context_client.RemoveLink(LinkId(**link['link_id']))
-
-    for device in descriptor_loader.devices:
-        device_client .DeleteDevice(DeviceId(**device['device_id']))
-
-    for context_uuid, topology_list in descriptor_loader.topologies.items():
-        for topology in topology_list:
-            context_client.RemoveTopology(TopologyId(**topology['topology_id']))
-
-    for context in descriptor_loader.contexts:
-        context_client.RemoveContext(ContextId(**context['context_id']))
-
-
-    # ----- List entities - Ensure database is empty again -------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    descriptor_loader.validate()
+    descriptor_loader.unload()
+    validate_empty_scenario(context_client)
diff --git a/src/tests/ecoc22/tests/test_functional_create_service.py b/src/tests/ecoc22/tests/test_functional_create_service.py
index 6dd4eb827..dab9c7eb1 100644
--- a/src/tests/ecoc22/tests/test_functional_create_service.py
+++ b/src/tests/ecoc22/tests/test_functional_create_service.py
@@ -14,7 +14,7 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum
 from common.tools.descriptor.Loader import DescriptorLoader
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from common.tools.object_factory.Context import json_context_id
@@ -31,57 +31,23 @@ DESCRIPTOR_FILE = 'ecoc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
 
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == num_services
-
-    for context_uuid, num_slices in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == num_slices
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
 
-
-    # ----- Create Service ---------------------------------------------------------------------------------------------
+    # Create Connectivity Service
     service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
     osm_wim.get_connectivity_service_status(service_uuid)
 
-
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
 
     response = context_client.ListServices(ADMIN_CONTEXT_ID)
     LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
diff --git a/src/tests/ecoc22/tests/test_functional_delete_service.py b/src/tests/ecoc22/tests/test_functional_delete_service.py
index 5cfdc3473..710e1a817 100644
--- a/src/tests/ecoc22/tests/test_functional_delete_service.py
+++ b/src/tests/ecoc22/tests/test_functional_delete_service.py
@@ -14,14 +14,14 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum
 from common.tools.descriptor.Loader import DescriptorLoader
-from common.tools.object_factory.Context import json_context_id
 from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
-from tests.Fixtures import context_client   # pylint: disable=unused-import
+from tests.Fixtures import context_client                                       # pylint: disable=unused-import
 from tests.tools.mock_osm.MockOSM import MockOSM
-from .Fixtures import osm_wim               # pylint: disable=unused-import
+from .Fixtures import osm_wim                                                   # pylint: disable=unused-import
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
@@ -30,44 +30,27 @@ DESCRIPTOR_FILE = 'ecoc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
 
-    service_uuids = set()
     response = context_client.ListServices(ADMIN_CONTEXT_ID)
     LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
     assert len(response.services) == 3 # 1xL2NM + 2xTAPI
 
+    service_uuids = set()
     for service in response.services:
         service_id = service.service_id
-
-        if service.service_type == ServiceTypeEnum.SERVICETYPE_L2NM:
-            service_uuid = service_id.service_uuid.uuid
-            service_uuids.add(service_uuid)
-            osm_wim.conn_info[service_uuid] = {}
-
         response = context_client.ListConnections(service_id)
         LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
             grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
 
         if service.service_type == ServiceTypeEnum.SERVICETYPE_L2NM:
             assert len(response.connections) == 2 # 2 connections per service (primary + backup)
+            service_uuid = service_id.service_uuid.uuid
+            service_uuids.add(service_uuid)
+            osm_wim.conn_info[service_uuid] = {}
         elif service.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
             assert len(response.connections) == 1 # 1 connection per service
         else:
@@ -78,34 +61,14 @@ def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # p
     assert len(service_uuids) == 1  # assume a single L2NM service has been created
     service_uuid = set(service_uuids).pop()
 
-
-    # ----- Delete Service ---------------------------------------------------------------------------------------------
+    # Delete Connectivity Service
     osm_wim.delete_connectivity_service(service_uuid)
 
-
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == num_services
-
-    for context_uuid, num_slices in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == num_slices
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
+
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
diff --git a/src/tests/ofc22/tests/test_functional_bootstrap.py b/src/tests/ofc22/tests/test_functional_bootstrap.py
index ad2d5703a..ca1882aaa 100644
--- a/src/tests/ofc22/tests/test_functional_bootstrap.py
+++ b/src/tests/ofc22/tests/test_functional_bootstrap.py
@@ -16,7 +16,7 @@ import logging, time
 from common.Constants import DEFAULT_CONTEXT_NAME
 from common.proto.context_pb2 import ContextId, Empty
 from common.proto.monitoring_pb2 import KpiDescriptorList
-from common.tests.LoadScenario import load_scenario_from_descriptor
+from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -33,45 +33,15 @@ def test_scenario_bootstrap(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure database is empty -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
+    validate_empty_scenario(context_client)
 
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
-
-
-    # ----- Load Scenario ----------------------------------------------------------------------------------------------
-    descriptor_loader = load_scenario_from_descriptor(
-        DESCRIPTOR_FILE, context_client, device_client, None, None)
-
-
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
-
-    for context_uuid, _ in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == 0
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+    descriptor_loader.validate()
 
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
diff --git a/src/tests/ofc22/tests/test_functional_cleanup.py b/src/tests/ofc22/tests/test_functional_cleanup.py
index d38b653b2..122526840 100644
--- a/src/tests/ofc22/tests/test_functional_cleanup.py
+++ b/src/tests/ofc22/tests/test_functional_cleanup.py
@@ -14,8 +14,8 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, DeviceId, Empty, LinkId, TopologyId
-from common.tools.descriptor.Loader import DescriptorLoader
+from common.proto.context_pb2 import ContextId
+from common.tools.descriptor.Loader import DescriptorLoader, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -27,64 +27,18 @@ LOGGER.setLevel(logging.DEBUG)
 DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
-def test_services_removed(
+def test_scenario_cleanup(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
-
-    for context_uuid, _ in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == 0
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
 
-
-    # ----- Delete Links, Devices, Topologies, Contexts ----------------------------------------------------------------
-    for link in descriptor_loader.links:
-        context_client.RemoveLink(LinkId(**link['link_id']))
-
-    for device in descriptor_loader.devices:
-        device_client .DeleteDevice(DeviceId(**device['device_id']))
-
-    for context_uuid, topology_list in descriptor_loader.topologies.items():
-        for topology in topology_list:
-            context_client.RemoveTopology(TopologyId(**topology['topology_id']))
-
-    for context in descriptor_loader.contexts:
-        context_client.RemoveContext(ContextId(**context['context_id']))
-
-
-    # ----- List entities - Ensure database is empty again -------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    descriptor_loader.validate()
+    descriptor_loader.unload()
+    validate_empty_scenario(context_client)
diff --git a/src/tests/ofc22/tests/test_functional_create_service.py b/src/tests/ofc22/tests/test_functional_create_service.py
index 92e0a74f9..dd7761f38 100644
--- a/src/tests/ofc22/tests/test_functional_create_service.py
+++ b/src/tests/ofc22/tests/test_functional_create_service.py
@@ -21,7 +21,7 @@ from common.tools.grpc.Tools import grpc_message_to_json_string
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from monitoring.client.MonitoringClient import MonitoringClient
-from tests.Fixtures import context_client, device_client, monitoring_client     # pylint: disable=unused-import
+from tests.Fixtures import context_client, monitoring_client                    # pylint: disable=unused-import
 from tests.tools.mock_osm.MockOSM import MockOSM
 from .Fixtures import osm_wim                                                   # pylint: disable=unused-import
 from .Objects import WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE
@@ -33,61 +33,27 @@ DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
 
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == num_services
-
-    for context_uuid, num_slices in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == num_slices
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
 
-
-    # ----- Create Service ---------------------------------------------------------------------------------------------
+    # Create Connectivity Service
     service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
     osm_wim.get_connectivity_service_status(service_uuid)
 
-
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
 
     response = context_client.ListServices(ADMIN_CONTEXT_ID)
     LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
-    assert len(response.services) == 2 # OLS & L3NM => (L3NM + TAPI)
+    assert len(response.services) == 2 # 1xL3NM + 1xTAPI
 
     for service in response.services:
         service_id = service.service_id
@@ -104,7 +70,6 @@ def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): #
             raise Exception('Unexpected ServiceType: {:s}'.format(str_service))
 
 
-
 def test_scenario_kpi_values_created(
     monitoring_client: MonitoringClient,    # pylint: disable=redefined-outer-name
 ) -> None:
diff --git a/src/tests/ofc22/tests/test_functional_delete_service.py b/src/tests/ofc22/tests/test_functional_delete_service.py
index 1811f219a..4fffc115e 100644
--- a/src/tests/ofc22/tests/test_functional_delete_service.py
+++ b/src/tests/ofc22/tests/test_functional_delete_service.py
@@ -14,10 +14,10 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum
 from common.tools.descriptor.Loader import DescriptorLoader
-from common.tools.object_factory.Context import json_context_id
 from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from tests.Fixtures import context_client   # pylint: disable=unused-import
 from tests.tools.mock_osm.MockOSM import MockOSM
@@ -30,44 +30,27 @@ DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
 
-    service_uuids = set()
     response = context_client.ListServices(ADMIN_CONTEXT_ID)
     LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
-    assert len(response.services) == 2 # OLS & L3NM => (L3NM + TAPI)
+    assert len(response.services) == 2 # 1xL3NM + 1xTAPI
 
+    service_uuids = set()
     for service in response.services:
         service_id = service.service_id
-
-        if service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM:
-            service_uuid = service_id.service_uuid.uuid
-            service_uuids.add(service_uuid)
-            osm_wim.conn_info[service_uuid] = {}
-
         response = context_client.ListConnections(service_id)
         LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
             grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
 
         if service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM:
             assert len(response.connections) == 1 # 1 connection per service
+            service_uuid = service_id.service_uuid.uuid
+            service_uuids.add(service_uuid)
+            osm_wim.conn_info[service_uuid] = {}
         elif service.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
             assert len(response.connections) == 1 # 1 connection per service
         else:
@@ -78,34 +61,14 @@ def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # p
     assert len(service_uuids) == 1  # assume a single L3NM service has been created
     service_uuid = set(service_uuids).pop()
 
-
-    # ----- Delete Service ---------------------------------------------------------------------------------------------
+    # Delete Connectivity Service
     osm_wim.delete_connectivity_service(service_uuid)
 
-
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == num_services
-
-    for context_uuid, num_slices in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == num_slices
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
+
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
-- 
GitLab


From 505db5ca87fa425d39fc6b888c65878174d3398e Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:38:36 +0000
Subject: [PATCH 057/229] Slice component:

- first complete implementation of slice grouper (under debug)
---
 src/slice/requirements.in                     |   3 +
 src/slice/service/SliceGrouper.py             |  61 --------
 src/slice/service/SliceServiceServicerImpl.py |   8 +
 src/slice/service/slice_grouper/Constants.py  |  22 +++
 .../service/slice_grouper/MetricsExporter.py  | 126 +++++++++++++++
 .../service/slice_grouper/SliceGrouper.py     |  94 ++++++++++++
 src/slice/service/slice_grouper/Tools.py      | 145 ++++++++++++++++++
 src/slice/service/slice_grouper/__init__.py   |  14 ++
 8 files changed, 412 insertions(+), 61 deletions(-)
 delete mode 100644 src/slice/service/SliceGrouper.py
 create mode 100644 src/slice/service/slice_grouper/Constants.py
 create mode 100644 src/slice/service/slice_grouper/MetricsExporter.py
 create mode 100644 src/slice/service/slice_grouper/SliceGrouper.py
 create mode 100644 src/slice/service/slice_grouper/Tools.py
 create mode 100644 src/slice/service/slice_grouper/__init__.py

diff --git a/src/slice/requirements.in b/src/slice/requirements.in
index 42a96f5a5..854c71a59 100644
--- a/src/slice/requirements.in
+++ b/src/slice/requirements.in
@@ -14,4 +14,7 @@
 
 #deepdiff==5.8.*
 numpy==1.23.*
+pandas==1.5.*
+questdb==1.0.1
+requests==2.27.*
 scikit-learn==1.1.*
diff --git a/src/slice/service/SliceGrouper.py b/src/slice/service/SliceGrouper.py
deleted file mode 100644
index e5363de1b..000000000
--- a/src/slice/service/SliceGrouper.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#import numpy as np
-#import pandas as pd
-from matplotlib import pyplot as plt
-from sklearn.datasets import make_blobs
-from sklearn.cluster import KMeans
-from common.proto.context_pb2 import ContextId
-from context.client.ContextClient import ContextClient
-
-class SliceGrouper:
-    def __init__(self) -> None:
-        pass
-
-    def load_slices(self, context_uuid : str) -> None:
-        context_client = ContextClient()
-
-        
-        context_client.ListSlices(ContextId)
-
-X, y = make_blobs(n_samples=300, n_features=2, cluster_std=[(10,.1),(100,.01)],centers= [(10,.9), (100,.99)])
-
-plt.scatter(X[:,0], X[:,1])
-plt.show()
-
-
-wcss = []
-for i in range(1, 11):
-    kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
-    kmeans.fit(X)
-    wcss.append(kmeans.inertia_)
-plt.plot(range(1, 11), wcss)
-plt.title('Elbow Method')
-plt.xlabel('Number of clusters')
-plt.ylabel('WCSS')
-plt.show()
-
-
-kmeans = KMeans(n_clusters=2, init='k-means++', max_iter=300, n_init=10, random_state=0)
-pred_y = kmeans.fit_predict(X)
-plt.scatter(X[:,0], X[:,1])
-plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red')
-plt.ylabel('service-slo-availability')
-plt.xlabel('service-slo-one-way-bandwidth')
-ax = plt.subplot(1, 1, 1)
-
-ax.set_ylim(bottom=0., top=1.)
-ax.set_xlim(left=0.)
-plt.show()
diff --git a/src/slice/service/SliceServiceServicerImpl.py b/src/slice/service/SliceServiceServicerImpl.py
index 21d820089..fe2377f91 100644
--- a/src/slice/service/SliceServiceServicerImpl.py
+++ b/src/slice/service/SliceServiceServicerImpl.py
@@ -28,6 +28,7 @@ from common.tools.grpc.Tools import grpc_message_to_json_string
 from context.client.ContextClient import ContextClient
 from interdomain.client.InterdomainClient import InterdomainClient
 from service.client.ServiceClient import ServiceClient
+from .slice_grouper.SliceGrouper import SliceGrouper
 
 LOGGER = logging.getLogger(__name__)
 
@@ -36,6 +37,7 @@ METRICS_POOL = MetricsPool('Slice', 'RPC')
 class SliceServiceServicerImpl(SliceServiceServicer):
     def __init__(self):
         LOGGER.debug('Creating Servicer...')
+        self._slice_grouper = SliceGrouper()
         LOGGER.debug('Servicer Created')
 
     def create_update(self, request : Slice) -> SliceId:
@@ -82,6 +84,9 @@ class SliceServiceServicerImpl(SliceServiceServicer):
             context_client.SetSlice(slice_active)
             return slice_id
 
+        if self._slice_grouper.is_enabled:
+            grouped = self._slice_grouper.group(slice_with_uuids)
+
         # Local domain slice
         service_id = ServiceId()
         # pylint: disable=no-member
@@ -202,6 +207,9 @@ class SliceServiceServicerImpl(SliceServiceServicer):
             current_slice.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_DEINIT # pylint: disable=no-member
             context_client.SetSlice(current_slice)
 
+            if self._slice_grouper.is_enabled:
+                ungrouped = self._slice_grouper.ungroup(current_slice)
+
             service_client = ServiceClient()
             for service_id in _slice.slice_service_ids:
                 current_slice = Slice()
diff --git a/src/slice/service/slice_grouper/Constants.py b/src/slice/service/slice_grouper/Constants.py
new file mode 100644
index 000000000..2edd853a2
--- /dev/null
+++ b/src/slice/service/slice_grouper/Constants.py
@@ -0,0 +1,22 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# TODO: define by means of settings
+SLICE_GROUPS = [
+    ('bronze',   10.0,  10.0), # Bronze   (10%, 10Gb/s)
+    ('silver',   30.0,  40.0), # Silver   (30%, 40Gb/s)
+    ('gold',     70.0,  50.0), # Gold     (70%, 50Gb/s)
+    ('platinum', 99.0, 100.0), # Platinum (99%, 100Gb/s)
+]
+SLICE_GROUP_NAMES = {slice_group[0] for slice_group in SLICE_GROUPS}
diff --git a/src/slice/service/slice_grouper/MetricsExporter.py b/src/slice/service/slice_grouper/MetricsExporter.py
new file mode 100644
index 000000000..d6738ac3e
--- /dev/null
+++ b/src/slice/service/slice_grouper/MetricsExporter.py
@@ -0,0 +1,126 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import datetime, logging, os, requests
+from typing import Any, Literal, Union
+from questdb.ingress import Sender, IngressError # pylint: disable=no-name-in-module
+
+LOGGER = logging.getLogger(__name__)
+
+MAX_RETRIES = 10
+DELAY_RETRIES = 0.5
+
+MSG_EXPORT_EXECUTED   = '[rest_request] Export(timestamp={:s}, symbols={:s}, columns={:s}) executed'
+MSG_EXPORT_FAILED     = '[rest_request] Export(timestamp={:s}, symbols={:s}, columns={:s}) failed, retry={:d}/{:d}...'
+MSG_REST_BAD_STATUS   = '[rest_request] Bad Reply url="{:s}" params="{:s}": status_code={:d} content={:s}'
+MSG_REST_EXECUTED     = '[rest_request] Query({:s}) executed, result: {:s}'
+MSG_REST_FAILED       = '[rest_request] Query({:s}) failed, retry={:d}/{:d}...'
+MSG_ERROR_MAX_RETRIES = 'Maximum number of retries achieved: {:d}'
+
+METRICSDB_HOSTNAME  = os.environ.get('METRICSDB_HOSTNAME')
+METRICSDB_ILP_PORT  = int(os.environ.get('METRICSDB_ILP_PORT'))
+METRICSDB_REST_PORT = int(os.environ.get('METRICSDB_REST_PORT'))
+METRICSDB_TABLE     = 'slice_groups'
+
+COLORS = {
+    'platinum': '#E5E4E2',
+    'gold'    : '#FFD700',
+    'silver'  : '#808080',
+    'bronze'  : '#CD7F32',
+}
+DEFAULT_COLOR = '#000000' # black
+
+SQL_MARK_DELETED = "UPDATE {:s} SET is_deleted='true' WHERE slice_uuid='{:s}';"
+
+class MetricsExporter():
+    def create_table(self) -> None:
+        sql_query = ' '.join([
+            'CREATE TABLE IF NOT EXISTS {:s} ('.format(str(METRICSDB_TABLE)),
+            ','.join([
+                'timestamp TIMESTAMP',
+                'slice_uuid SYMBOL',
+                'slice_group SYMBOL',
+                'slice_color SYMBOL',
+                'is_deleted SYMBOL',
+                'slice_availability DOUBLE',
+                'slice_capacity_center DOUBLE',
+                'slice_capacity DOUBLE',
+            ]),
+            ') TIMESTAMP(timestamp);'
+        ])
+        try:
+            result = self.rest_request(sql_query)
+            if not result: raise Exception
+            LOGGER.info('Table {:s} created'.format(str(METRICSDB_TABLE)))
+        except Exception as e:
+            LOGGER.warning('Table {:s} cannot be created. {:s}'.format(str(METRICSDB_TABLE), str(e)))
+            raise
+
+    def export_point(
+        self, slice_uuid : str, slice_group : str, slice_availability : float, slice_capacity : float,
+        is_center : bool = False
+    ) -> None:
+        dt_timestamp = datetime.datetime.utcnow()
+        slice_color = COLORS.get(slice_group, DEFAULT_COLOR)
+        symbols = dict(slice_uuid=slice_uuid, slice_group=slice_group, slice_color=slice_color, is_deleted='false')
+        columns = dict(slice_availability=slice_availability)
+        columns['slice_capacity_center' if is_center else 'slice_capacity'] = slice_capacity
+
+        for retry in range(MAX_RETRIES):
+            try:
+                with Sender(METRICSDB_HOSTNAME, METRICSDB_ILP_PORT) as sender:
+                    sender.row(METRICSDB_TABLE, symbols=symbols, columns=columns, at=dt_timestamp)
+                    sender.flush()
+                LOGGER.info(MSG_EXPORT_EXECUTED.format(str(dt_timestamp), str(symbols), str(columns)))
+                return
+            except (Exception, IngressError): # pylint: disable=broad-except
+                LOGGER.exception(MSG_EXPORT_FAILED.format(
+                    str(dt_timestamp), str(symbols), str(columns), retry+1, MAX_RETRIES))
+
+        raise Exception(MSG_ERROR_MAX_RETRIES.format(MAX_RETRIES))
+
+    def delete_point(self, slice_uuid : str) -> None:
+        sql_query = SQL_MARK_DELETED.format(str(METRICSDB_TABLE), slice_uuid)
+        try:
+            result = self.rest_request(sql_query)
+            if not result: raise Exception
+            LOGGER.info('Point {:s} deleted'.format(str(slice_uuid)))
+        except Exception as e:
+            LOGGER.warning('Point {:s} cannot be deleted. {:s}'.format(str(slice_uuid), str(e)))
+            raise
+
+    def rest_request(self, rest_query : str) -> Union[Any, Literal[True]]:
+        url = 'http://{:s}:{:d}/exec'.format(METRICSDB_HOSTNAME, METRICSDB_REST_PORT)
+        params = {'query': rest_query, 'fmt': 'json'}
+
+        for retry in range(MAX_RETRIES):
+            try:
+                response = requests.get(url, params=params)
+                status_code = response.status_code
+                if status_code not in {200}:
+                    str_content = response.content.decode('UTF-8')
+                    raise Exception(MSG_REST_BAD_STATUS.format(str(url), str(params), status_code, str_content))
+
+                json_response = response.json()
+                if 'ddl' in json_response:
+                    LOGGER.info(MSG_REST_EXECUTED.format(str(rest_query), str(json_response['ddl'])))
+                    return True
+                elif 'dataset' in json_response:
+                    LOGGER.info(MSG_REST_EXECUTED.format(str(rest_query), str(json_response['dataset'])))
+                    return json_response['dataset']
+
+            except Exception: # pylint: disable=broad-except
+                LOGGER.exception(MSG_REST_FAILED.format(str(rest_query), retry+1, MAX_RETRIES))
+
+        raise Exception(MSG_ERROR_MAX_RETRIES.format(MAX_RETRIES))
diff --git a/src/slice/service/slice_grouper/SliceGrouper.py b/src/slice/service/slice_grouper/SliceGrouper.py
new file mode 100644
index 000000000..735d02899
--- /dev/null
+++ b/src/slice/service/slice_grouper/SliceGrouper.py
@@ -0,0 +1,94 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging, pandas, threading
+from typing import Dict, Optional, Tuple
+from sklearn.cluster import KMeans
+from common.proto.context_pb2 import Slice
+from common.tools.grpc.Tools import grpc_message_to_json_string
+from .Constants import SLICE_GROUPS
+from .MetricsExporter import MetricsExporter
+from .Tools import (
+    add_slice_to_group, create_slice_groups, get_slice_grouping_parameters, is_slice_grouping_enabled,
+    remove_slice_from_group)
+
+LOGGER = logging.getLogger(__name__)
+
+class SliceGrouper:
+    def __init__(self) -> None:
+        self._lock = threading.Lock()
+        self._is_enabled = is_slice_grouping_enabled()
+        if not self._is_enabled: return
+
+        metrics_exporter = MetricsExporter()
+        metrics_exporter.create_table()
+
+        self._slice_groups = create_slice_groups(SLICE_GROUPS)
+
+        # Initialize and fit K-Means with the pre-defined clusters we want, i.e., one per slice group
+        df_groups = pandas.DataFrame(SLICE_GROUPS, columns=['name', 'availability', 'capacity_gbps'])
+        k_means = KMeans(n_clusters=df_groups.shape[0])
+        k_means.fit(df_groups[['availability', 'capacity_gbps']])
+        df_groups['label'] = k_means.predict(df_groups[['availability', 'capacity_gbps']])
+        self._k_means = k_means
+        self._df_groups = df_groups
+
+        self._group_mapping : Dict[str, Dict] = {
+            group['name']:{k:v for k,v in group.items() if k != 'name'}
+            for group in list(df_groups.to_dict('records'))
+        }
+
+        label_to_group = {}
+        for group_name,group_attrs in self._group_mapping.items():
+            label = group_attrs['label']
+            availability = group_attrs['availability']
+            capacity_gbps = group_attrs['capacity_gbps']
+            metrics_exporter.export_point(
+                group_name, group_name, availability, capacity_gbps, is_center=True)
+            label_to_group[label] = group_name
+        self._label_to_group = label_to_group
+
+    def _select_group(self, slice_obj : Slice) -> Optional[Tuple[str, float, float]]:
+        with self._lock:
+            grouping_parameters = get_slice_grouping_parameters(slice_obj)
+            LOGGER.debug('[_select_group] grouping_parameters={:s}'.format(str(grouping_parameters)))
+            if grouping_parameters is None: return None
+
+            sample = pandas.DataFrame([grouping_parameters], columns=['availability', 'capacity_gbps'])
+            sample['label'] = self._k_means.predict(sample)
+            sample = sample.to_dict('records')[0]   # pylint: disable=unsubscriptable-object
+            LOGGER.debug('[_select_group] sample={:s}'.format(str(sample)))
+            label = sample['label']
+            availability = sample['availability']
+            capacity_gbps = sample['capacity_gbps']
+            group_name = self._label_to_group[label]
+            LOGGER.debug('[_select_group] group_name={:s}'.format(str(group_name)))
+            return group_name, availability, capacity_gbps
+
+    @property
+    def is_enabled(self): return self._is_enabled
+
+    def group(self, slice_obj : Slice) -> bool:
+        LOGGER.debug('[group] slice_obj={:s}'.format(grpc_message_to_json_string(slice_obj)))
+        selected_group = self._select_group(slice_obj)
+        LOGGER.debug('[group] selected_group={:s}'.format(str(selected_group)))
+        if selected_group is None: return False
+        return add_slice_to_group(slice_obj, selected_group)
+
+    def ungroup(self, slice_obj : Slice) -> bool:
+        LOGGER.debug('[ungroup] slice_obj={:s}'.format(grpc_message_to_json_string(slice_obj)))
+        selected_group = self._select_group(slice_obj)
+        LOGGER.debug('[ungroup] selected_group={:s}'.format(str(selected_group)))
+        if selected_group is None: return False
+        return remove_slice_from_group(slice_obj, selected_group)
diff --git a/src/slice/service/slice_grouper/Tools.py b/src/slice/service/slice_grouper/Tools.py
new file mode 100644
index 000000000..1ff82bece
--- /dev/null
+++ b/src/slice/service/slice_grouper/Tools.py
@@ -0,0 +1,145 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, List, Optional, Set, Tuple
+from common.Constants import DEFAULT_CONTEXT_NAME
+from common.Settings import get_setting
+from common.method_wrappers.ServiceExceptions import NotFoundException
+from common.proto.context_pb2 import IsolationLevelEnum, Slice, SliceId, SliceStatusEnum
+from common.tools.context_queries.Context import create_context
+from common.tools.context_queries.Slice import get_slice
+from context.client.ContextClient import ContextClient
+from slice.service.slice_grouper.MetricsExporter import MetricsExporter
+
+SETTING_NAME_SLICE_GROUPING = 'SLICE_GROUPING'
+TRUE_VALUES = {'Y', 'YES', 'TRUE', 'T', 'E', 'ENABLE', 'ENABLED'}
+
+NO_ISOLATION = IsolationLevelEnum.NO_ISOLATION
+
+def is_slice_grouping_enabled() -> bool:
+    is_enabled = get_setting(SETTING_NAME_SLICE_GROUPING, default=None)
+    if is_enabled is None: return False
+    str_is_enabled = str(is_enabled).upper()
+    return str_is_enabled in TRUE_VALUES
+
+def create_slice_group(
+    context_uuid : str, slice_name : str, capacity_gbps : float, availability : float
+) -> Slice:
+    slice_group_obj = Slice()
+    slice_group_obj.slice_id.context_id.context_uuid.uuid = context_uuid            # pylint: disable=no-member
+    slice_group_obj.slice_id.slice_uuid.uuid = slice_name                           # pylint: disable=no-member
+    slice_group_obj.name = slice_name
+    slice_group_obj.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_ACTIVE  # pylint: disable=no-member
+    #del slice_group_obj.slice_endpoint_ids[:] # no endpoints initially
+    #del slice_group_obj.slice_service_ids[:] # no sub-services
+    #del slice_group_obj.slice_subslice_ids[:] # no sub-slices
+    #del slice_group_obj.slice_config.config_rules[:] # no config rules
+    slice_group_obj.slice_owner.owner_uuid.uuid = 'TeraFlowSDN'                     # pylint: disable=no-member
+    slice_group_obj.slice_owner.owner_string = 'TeraFlowSDN'                        # pylint: disable=no-member
+
+    constraint_sla_capacity = slice_group_obj.slice_constraints.add()               # pylint: disable=no-member
+    constraint_sla_capacity.sla_capacity.capacity_gbps = capacity_gbps
+
+    constraint_sla_availability = slice_group_obj.slice_constraints.add()           # pylint: disable=no-member
+    constraint_sla_availability.sla_availability.num_disjoint_paths = 1
+    constraint_sla_availability.sla_availability.all_active = True
+    constraint_sla_availability.sla_availability.availability = availability
+
+    constraint_sla_isolation = slice_group_obj.slice_constraints.add()              # pylint: disable=no-member
+    constraint_sla_isolation.sla_isolation.isolation_level.append(NO_ISOLATION)
+
+    return slice_group_obj
+
+def create_slice_groups(
+    slice_groups : List[Tuple[str, float, float]], context_uuid : str = DEFAULT_CONTEXT_NAME
+) -> Dict[str, SliceId]:
+    context_client = ContextClient()
+    create_context(context_client, context_uuid)
+
+    slice_group_ids : Dict[str, SliceId] = dict()
+    for slice_group in slice_groups:
+        slice_group_name = slice_group[0]
+        slice_group_obj = get_slice(context_client, slice_group_name, DEFAULT_CONTEXT_NAME)
+        if slice_group_obj is None:
+            slice_group_obj = create_slice_group(
+                DEFAULT_CONTEXT_NAME, slice_group_name, slice_group[2], slice_group[1])
+            slice_group_id = context_client.SetSlice(slice_group_obj)
+            slice_group_ids[slice_group_name] = slice_group_id
+        else:
+            slice_group_ids[slice_group_name] = slice_group_obj.slice_id
+
+    return slice_group_ids
+
+def get_slice_grouping_parameters(slice_obj : Slice) -> Optional[Tuple[float, float]]:
+    isolation_levels : Set[int] = set()
+    availability : Optional[float] = None
+    capacity_gbps : Optional[float] = None
+
+    for constraint in slice_obj.slice_constraints:
+        kind = constraint.WhichOneof('constraint')
+        if kind == 'sla_isolation':
+            isolation_levels.update(constraint.sla_isolation.isolation_level)
+        elif kind == 'sla_capacity':
+            capacity_gbps = constraint.sla_capacity.capacity_gbps
+        elif kind == 'sla_availability':
+            availability = constraint.sla_availability.availability
+        else:
+            continue
+
+    no_isolation_level = len(isolation_levels) == 0
+    single_isolation_level = len(isolation_levels) == 1
+    has_no_isolation_level = NO_ISOLATION in isolation_levels
+    can_be_grouped = no_isolation_level or (single_isolation_level and has_no_isolation_level)
+    if not can_be_grouped: return None
+    if availability is None: return None
+    if capacity_gbps is None: return None
+    return availability, capacity_gbps
+
+def add_slice_to_group(slice_obj : Slice, selected_group : Tuple[str, float, float]) -> bool:
+    group_name, availability, capacity_gbps = selected_group
+    slice_uuid = slice_obj.slice_id.slice_uuid.uuid
+
+    context_client = ContextClient()
+    slice_group_obj = get_slice(context_client, group_name, DEFAULT_CONTEXT_NAME, rw_copy=True)
+    if slice_group_obj is None:
+        raise NotFoundException('Slice', group_name, extra_details='while adding to group')
+
+    for subslice_id in slice_group_obj.slice_subslice_ids:
+        if subslice_id == slice_obj.slice_id: break # already added
+    else:
+        slice_group_obj.slice_subslice_ids.add().CopyFrom(slice_obj.slice_id)
+        # TODO: add other logic, such as re-configure parent slice
+
+    metrics_exporter = MetricsExporter()
+    metrics_exporter.export_point(
+        slice_uuid, group_name, availability, capacity_gbps, is_center=False)
+
+    return True
+
+def remove_slice_from_group(slice_obj : Slice, selected_group : Tuple[str, float, float]) -> bool:
+    group_name, _, _ = selected_group
+    slice_uuid = slice_obj.slice_id.slice_uuid.uuid
+
+    context_client = ContextClient()
+    slice_group_obj = get_slice(context_client, group_name, DEFAULT_CONTEXT_NAME, rw_copy=True)
+    if slice_group_obj is None:
+        raise NotFoundException('Slice', group_name, extra_details='while removing from group')
+
+    if slice_obj.slice_id in slice_group_obj.slice_subslice_ids:
+        slice_group_obj.slice_subslice_ids.remove(slice_obj.slice_id)
+        # TODO: other logic, such as deconfigure parent slice
+
+    metrics_exporter = MetricsExporter()
+    metrics_exporter.delete_point(slice_uuid)
+    return True
diff --git a/src/slice/service/slice_grouper/__init__.py b/src/slice/service/slice_grouper/__init__.py
new file mode 100644
index 000000000..1549d9811
--- /dev/null
+++ b/src/slice/service/slice_grouper/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
-- 
GitLab


From 7a3d877901dbbaa2321038418ab8f9d4856d35a5 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 10:39:50 +0000
Subject: [PATCH 058/229] Slice Manifest:

- updated to include flag to activate slice grouping
- updated to import qdb secrets
---
 manifests/sliceservice.yaml | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/manifests/sliceservice.yaml b/manifests/sliceservice.yaml
index 447f6a1c7..e5757874b 100644
--- a/manifests/sliceservice.yaml
+++ b/manifests/sliceservice.yaml
@@ -37,6 +37,11 @@ spec:
         env:
         - name: LOG_LEVEL
           value: "INFO"
+        - name: SLICE_GROUPING
+          value: "ENABLE"
+        envFrom:
+        - secretRef:
+            name: qdb-data
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:4040"]
-- 
GitLab


From 9243a1e639575af5fadd9e8625501d3d6fb7f6ed Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 11:31:41 +0000
Subject: [PATCH 059/229] WebUI component:

- moved old files
---
 src/webui/{ => old}/grafana_backup_dashboard.json | 0
 src/webui/{ => old}/grafana_dashboard.json        | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 rename src/webui/{ => old}/grafana_backup_dashboard.json (100%)
 rename src/webui/{ => old}/grafana_dashboard.json (100%)

diff --git a/src/webui/grafana_backup_dashboard.json b/src/webui/old/grafana_backup_dashboard.json
similarity index 100%
rename from src/webui/grafana_backup_dashboard.json
rename to src/webui/old/grafana_backup_dashboard.json
diff --git a/src/webui/grafana_dashboard.json b/src/webui/old/grafana_dashboard.json
similarity index 100%
rename from src/webui/grafana_dashboard.json
rename to src/webui/old/grafana_dashboard.json
-- 
GitLab


From b3341edc3f631d564fa229d702207cc2ec513903 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 12:17:50 +0000
Subject: [PATCH 060/229] Monitoring component:

- updated name of variable containing target table
---
 src/monitoring/.gitlab-ci.yml                           | 2 +-
 src/monitoring/service/MonitoringServiceServicerImpl.py | 8 ++++----
 src/monitoring/tests/test_unitary.py                    | 4 ++--
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/monitoring/.gitlab-ci.yml b/src/monitoring/.gitlab-ci.yml
index ff620c534..7c3a14975 100644
--- a/src/monitoring/.gitlab-ci.yml
+++ b/src/monitoring/.gitlab-ci.yml
@@ -56,7 +56,7 @@ unit_test monitoring:
     - docker pull questdb/questdb
     - docker run --name questdb -d -p 9000:9000  -p 9009:9009  -p 8812:8812  -p 9003:9003  -e QDB_CAIRO_COMMIT_LAG=1000 -e QDB_CAIRO_MAX_UNCOMMITTED_ROWS=100000 --network=teraflowbridge --rm questdb/questdb
     - sleep 10
-    - docker run --name $IMAGE_NAME -d -p 7070:7070 --env METRICSDB_HOSTNAME=questdb --env METRICSDB_ILP_PORT=9009 --env METRICSDB_REST_PORT=9000 --env METRICSDB_TABLE=monitoring -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
+    - docker run --name $IMAGE_NAME -d -p 7070:7070 --env METRICSDB_HOSTNAME=questdb --env METRICSDB_ILP_PORT=9009 --env METRICSDB_REST_PORT=9000 --env METRICSDB_TABLE_MONITORING_KPIS=tfs_monitoring_kpis -v "$PWD/src/$IMAGE_NAME/tests:/opt/results" --network=teraflowbridge $CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG
     - sleep 30
     - docker ps -a
     - docker logs $IMAGE_NAME
diff --git a/src/monitoring/service/MonitoringServiceServicerImpl.py b/src/monitoring/service/MonitoringServiceServicerImpl.py
index 0bbce1509..f408734df 100644
--- a/src/monitoring/service/MonitoringServiceServicerImpl.py
+++ b/src/monitoring/service/MonitoringServiceServicerImpl.py
@@ -47,7 +47,7 @@ MONITORING_INCLUDEKPI_COUNTER = Counter('monitoring_includekpi_counter', 'Monito
 METRICSDB_HOSTNAME = os.environ.get("METRICSDB_HOSTNAME")
 METRICSDB_ILP_PORT = os.environ.get("METRICSDB_ILP_PORT")
 METRICSDB_REST_PORT = os.environ.get("METRICSDB_REST_PORT")
-METRICSDB_TABLE = os.environ.get("METRICSDB_TABLE")
+METRICSDB_TABLE_MONITORING_KPIS = os.environ.get("METRICSDB_TABLE_MONITORING_KPIS")
 
 class MonitoringServiceServicerImpl(MonitoringServiceServicer):
     def __init__(self, name_mapping : NameMapping):
@@ -57,7 +57,7 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
         self.management_db = ManagementDBTools.ManagementDB('monitoring.db')
         self.deviceClient = DeviceClient()
         self.metrics_db = MetricsDBTools.MetricsDB(
-            METRICSDB_HOSTNAME, name_mapping, METRICSDB_ILP_PORT, METRICSDB_REST_PORT, METRICSDB_TABLE)
+            METRICSDB_HOSTNAME, name_mapping, METRICSDB_ILP_PORT, METRICSDB_REST_PORT, METRICSDB_TABLE_MONITORING_KPIS)
         self.subs_manager = SubscriptionManager(self.metrics_db)
         self.alarm_manager = AlarmManager(self.metrics_db)
         LOGGER.info('MetricsDB initialized')
@@ -592,8 +592,8 @@ class MonitoringServiceServicerImpl(MonitoringServiceServicer):
                 LOGGER.info('GetInstantKpi error: KpiID({:s}): not found in database'.format(str(kpi_id)))
                 response.kpi_id.kpi_id.uuid = "NoID"
             else:
-                query = f"SELECT kpi_id, timestamp, kpi_value FROM {METRICSDB_TABLE} WHERE kpi_id = '{kpi_id}' " \
-                        f"LATEST ON timestamp PARTITION BY kpi_id"
+                query = f"SELECT kpi_id, timestamp, kpi_value FROM {METRICSDB_TABLE_MONITORING_KPIS} " \
+                        f"WHERE kpi_id = '{kpi_id}' LATEST ON timestamp PARTITION BY kpi_id"
                 data = self.metrics_db.run_query(query)
                 LOGGER.debug(data)
                 if len(data) == 0:
diff --git a/src/monitoring/tests/test_unitary.py b/src/monitoring/tests/test_unitary.py
index 1428b0ed5..c883f9d14 100644
--- a/src/monitoring/tests/test_unitary.py
+++ b/src/monitoring/tests/test_unitary.py
@@ -75,7 +75,7 @@ os.environ[get_env_var_name(ServiceNameEnum.MONITORING, ENVVAR_SUFIX_SERVICE_POR
 METRICSDB_HOSTNAME = os.environ.get('METRICSDB_HOSTNAME')
 METRICSDB_ILP_PORT = os.environ.get('METRICSDB_ILP_PORT')
 METRICSDB_REST_PORT = os.environ.get('METRICSDB_REST_PORT')
-METRICSDB_TABLE = os.environ.get('METRICSDB_TABLE')
+METRICSDB_TABLE_MONITORING_KPIS = os.environ.get('METRICSDB_TABLE_MONITORING_KPIS')
 
 LOGGER = logging.getLogger(__name__)
 
@@ -193,7 +193,7 @@ def management_db():
 def metrics_db(monitoring_service : MonitoringService): # pylint: disable=redefined-outer-name
     return monitoring_service.monitoring_servicer.metrics_db
     #_metrics_db = MetricsDBTools.MetricsDB(
-    #    METRICSDB_HOSTNAME, METRICSDB_ILP_PORT, METRICSDB_REST_PORT, METRICSDB_TABLE)
+    #    METRICSDB_HOSTNAME, METRICSDB_ILP_PORT, METRICSDB_REST_PORT, METRICSDB_TABLE_MONITORING_KPIS)
     #return _metrics_db
 
 @pytest.fixture(scope='session')
-- 
GitLab


From cfd8a206f9b873d42cea695748e6f4c7d2df9d2b Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 12:28:02 +0000
Subject: [PATCH 061/229] WebUI component:

- updated dashboard's table name
- renamed dashboard's file name
---
 ...sql.json => grafana_db_mon_kpis_psql.json} | 28 +++++++++----------
 1 file changed, 14 insertions(+), 14 deletions(-)
 rename src/webui/{grafana_dashboard_psql.json => grafana_db_mon_kpis_psql.json} (91%)

diff --git a/src/webui/grafana_dashboard_psql.json b/src/webui/grafana_db_mon_kpis_psql.json
similarity index 91%
rename from src/webui/grafana_dashboard_psql.json
rename to src/webui/grafana_db_mon_kpis_psql.json
index ec89c1647..750e5254e 100644
--- a/src/webui/grafana_dashboard_psql.json
+++ b/src/webui/grafana_db_mon_kpis_psql.json
@@ -33,7 +33,7 @@
       {
         "datasource": {
           "type": "postgres",
-          "uid": "questdb"
+          "uid": "questdb-mon-kpi"
         },
         "fieldConfig": {
           "defaults": {
@@ -162,14 +162,14 @@
           {
             "datasource": {
               "type": "postgres",
-              "uid": "questdb"
+              "uid": "questdb-mon-kpi"
             },
             "format": "time_series",
             "group": [],
             "hide": false,
             "metricColumn": "kpi_value",
             "rawQuery": true,
-            "rawSql": "SELECT\r\n  $__time(timestamp), kpi_value AS metric, device_name, endpoint_name, kpi_sample_type\r\nFROM\r\n  tfs_monitoring\r\nWHERE\r\n  $__timeFilter(timestamp) AND device_name IN (${device_name}) AND endpoint_name IN (${endpoint_name}) AND kpi_sample_type IN (${kpi_sample_type})\r\nGROUP BY\r\n  device_name, endpoint_name, kpi_sample_type\r\nORDER BY\r\n  timestamp",
+            "rawSql": "SELECT\r\n  $__time(timestamp), kpi_value AS metric, device_name, endpoint_name, kpi_sample_type\r\nFROM\r\n  tfs_monitoring_kpis\r\nWHERE\r\n  $__timeFilter(timestamp) AND device_name IN (${device_name}) AND endpoint_name IN (${endpoint_name}) AND kpi_sample_type IN (${kpi_sample_type})\r\nGROUP BY\r\n  device_name, endpoint_name, kpi_sample_type\r\nORDER BY\r\n  timestamp",
             "refId": "A",
             "select": [
               [
@@ -181,7 +181,7 @@
                 }
               ]
             ],
-            "table": "monitoring",
+            "table": "tfs_monitoring_kpis",
             "timeColumn": "timestamp",
             "where": [
               {
@@ -227,16 +227,16 @@
           },
           "datasource": {
             "type": "postgres",
-            "uid": "questdb"
+            "uid": "questdb-mon-kpi"
           },
-          "definition": "SELECT DISTINCT device_name FROM tfs_monitoring;",
+          "definition": "SELECT DISTINCT device_name FROM tfs_monitoring_kpis;",
           "hide": 0,
           "includeAll": true,
           "label": "Device",
           "multi": true,
           "name": "device_name",
           "options": [],
-          "query": "SELECT DISTINCT device_name FROM tfs_monitoring;",
+          "query": "SELECT DISTINCT device_name FROM tfs_monitoring_kpis;",
           "refresh": 2,
           "regex": "",
           "skipUrlSync": false,
@@ -255,16 +255,16 @@
           },
           "datasource": {
             "type": "postgres",
-            "uid": "questdb"
+            "uid": "questdb-mon-kpi"
           },
-          "definition": "SELECT DISTINCT endpoint_name FROM tfs_monitoring WHERE device_name IN (${device_name})",
+          "definition": "SELECT DISTINCT endpoint_name FROM tfs_monitoring_kpis WHERE device_name IN (${device_name})",
           "hide": 0,
           "includeAll": true,
           "label": "EndPoint",
           "multi": true,
           "name": "endpoint_name",
           "options": [],
-          "query": "SELECT DISTINCT endpoint_name FROM tfs_monitoring WHERE device_name IN (${device_name})",
+          "query": "SELECT DISTINCT endpoint_name FROM tfs_monitoring_kpis WHERE device_name IN (${device_name})",
           "refresh": 2,
           "regex": "",
           "skipUrlSync": false,
@@ -283,16 +283,16 @@
           },
           "datasource": {
             "type": "postgres",
-            "uid": "questdb"
+            "uid": "questdb-mon-kpi"
           },
-          "definition": "SELECT DISTINCT kpi_sample_type FROM tfs_monitoring;",
+          "definition": "SELECT DISTINCT kpi_sample_type FROM tfs_monitoring_kpis;",
           "hide": 0,
           "includeAll": true,
           "label": "Kpi Sample Type",
           "multi": true,
           "name": "kpi_sample_type",
           "options": [],
-          "query": "SELECT DISTINCT kpi_sample_type FROM tfs_monitoring;",
+          "query": "SELECT DISTINCT kpi_sample_type FROM tfs_monitoring_kpis;",
           "refresh": 2,
           "regex": "",
           "skipUrlSync": false,
@@ -308,7 +308,7 @@
     "timepicker": {},
     "timezone": "utc",
     "title": "L3 Monitoring",
-    "uid": "tf-l3-monit",
+    "uid": "tfs-l3-monit",
     "version": 6,
     "weekStart": ""
   }
-- 
GitLab


From e5e54f18fa589df50a3d9b7d66a57adc75cf0c5b Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 12:43:20 +0000
Subject: [PATCH 062/229] Deploy scripts:

- enabled support to drop QuestDB tables during deploy
- renamed variable QDB_TABLE to QDB_TABLE_MONITORING_KPIS
- renamed default table name tfs_monitoring to tfs_monitoring_kpis
- renamed secret attribute METRICSDB_TABLE to METRICSDB_TABLE_MONITORING_KPIS
- improved log messages of tfs.sh
- updated deploy scripts accordingly
- removed unused variables and commands
- corrected documentation of some variables
---
 deploy/all.sh                              | 40 ++++--------
 deploy/crdb.sh                             |  3 -
 deploy/nats.sh                             |  8 ---
 deploy/qdb.sh                              | 42 ++++++------
 deploy/tfs.sh                              | 49 +++++++++-----
 my_deploy.sh                               | 18 ++---
 src/tests/benchmark/policy/deploy_specs.sh | 76 ++++++++++++++++++----
 src/tests/ecoc22/deploy_specs.sh           | 19 +++---
 src/tests/ofc22/deploy_specs.sh            | 19 +++---
 9 files changed, 155 insertions(+), 119 deletions(-)

diff --git a/deploy/all.sh b/deploy/all.sh
index a99607f5b..09239afed 100755
--- a/deploy/all.sh
+++ b/deploy/all.sh
@@ -25,14 +25,14 @@
 # By default, assume internal MicroK8s registry is used.
 export TFS_REGISTRY_IMAGES=${TFS_REGISTRY_IMAGES:-"http://localhost:32000/tfs/"}
 
-# If not already set, set the list of components you want to build images for, and deploy.
+# If not already set, set the list of components, separated by spaces, you want to build images for, and deploy.
 # By default, only basic components are deployed
-export TFS_COMPONENTS=${TFS_COMPONENTS:-"context device monitoring service compute webui"}
+export TFS_COMPONENTS=${TFS_COMPONENTS:-"context device automation monitoring pathcomp service slice compute webui load_generator"}
 
 # If not already set, set the tag you want to use for your images.
 export TFS_IMAGE_TAG=${TFS_IMAGE_TAG:-"dev"}
 
-# If not already set, set the name of the Kubernetes namespace to deploy to.
+# If not already set, set the name of the Kubernetes namespace to deploy TFS to.
 export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
 
 # If not already set, set additional manifest files to be applied after the deployment
@@ -41,7 +41,7 @@ export TFS_EXTRA_MANIFESTS=${TFS_EXTRA_MANIFESTS:-""}
 # If not already set, set the new Grafana admin password
 export TFS_GRAFANA_PASSWORD=${TFS_GRAFANA_PASSWORD:-"admin123+"}
 
-# If not already set, disable skip-build flag.
+# If not already set, disable skip-build flag to rebuild the Docker images.
 # If TFS_SKIP_BUILD is "YES", the containers are not rebuilt-retagged-repushed and existing ones are used.
 export TFS_SKIP_BUILD=${TFS_SKIP_BUILD:-""}
 
@@ -60,12 +60,6 @@ export CRDB_PASSWORD=${CRDB_PASSWORD:-"tfs123"}
 # If not already set, set the database name to be used by Context.
 export CRDB_DATABASE=${CRDB_DATABASE:-"tfs"}
 
-# If not already set, set the name of the secret where CockroachDB data and credentials will be stored.
-export CRDB_SECRET_NAME=${CRDB_SECRET_NAME:-"crdb-data"}
-
-# If not already set, set the namespace where the secret containing CockroachDB data and credentials will be stored.
-export CRDB_SECRET_NAMESPACE=${CRDB_SECRET_NAMESPACE:-${TFS_K8S_NAMESPACE}}
-
 # If not already set, set CockroachDB installation mode. Accepted values are: 'single' and 'cluster'.
 # "YES", the database pointed by variable CRDB_NAMESPACE will be dropped while
 # checking/deploying CockroachDB.
@@ -78,7 +72,7 @@ export CRDB_SECRET_NAMESPACE=${CRDB_SECRET_NAMESPACE:-${TFS_K8S_NAMESPACE}}
 #   Ref: https://www.cockroachlabs.com/docs/stable/recommended-production-settings.html
 export CRDB_DEPLOY_MODE=${CRDB_DEPLOY_MODE:-"single"}
 
-# If not already set, disable flag for dropping database if exists.
+# If not already set, disable flag for dropping database, if it exists.
 # WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE DATABASE INFORMATION!
 # If CRDB_DROP_DATABASE_IF_EXISTS is "YES", the database pointed by variable CRDB_NAMESPACE will be dropped while
 # checking/deploying CockroachDB.
@@ -96,12 +90,6 @@ export CRDB_REDEPLOY=${CRDB_REDEPLOY:-""}
 # If not already set, set the namespace where NATS will be deployed.
 export NATS_NAMESPACE=${NATS_NAMESPACE:-"nats"}
 
-# If not already set, set the name of the secret where NATS data and credentials will be stored.
-export NATS_SECRET_NAME=${NATS_SECRET_NAME:-"nats-data"}
-
-# If not already set, set the namespace where the secret containing NATS data and credentials will be stored.
-export NATS_SECRET_NAMESPACE=${NATS_SECRET_NAMESPACE:-${TFS_K8S_NAMESPACE}}
-
 # If not already set, disable flag for re-deploying NATS from scratch.
 # WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE MESSAGE BROKER INFORMATION!
 # If NATS_REDEPLOY is "YES", the message broker will be dropped while checking/deploying NATS.
@@ -113,20 +101,20 @@ export NATS_REDEPLOY=${NATS_REDEPLOY:-""}
 # If not already set, set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE=${QDB_NAMESPACE:-"qdb"}
 
-# If not already set, set the database username to be used by Monitoring.
+# If not already set, set the database username to be used for QuestDB.
 export QDB_USERNAME=${QDB_USERNAME:-"admin"}
 
-# If not already set, set the database user's password to be used by Monitoring.
+# If not already set, set the database user's password to be used for QuestDB.
 export QDB_PASSWORD=${QDB_PASSWORD:-"quest"}
 
-# If not already set, set the table name to be used by Monitoring.
-export QDB_TABLE=${QDB_TABLE:-"tfs_monitoring"}
+# If not already set, set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS=${QDB_TABLE_MONITORING_KPIS:-"tfs_monitoring_kpis"}
 
-## If not already set, disable flag for dropping table if exists.
-## WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE TABLE INFORMATION!
-## If QDB_DROP_TABLE_IF_EXISTS is "YES", the table pointed by variable QDB_TABLE will be dropped while
-## checking/deploying QuestDB.
-#export QDB_DROP_TABLE_IF_EXISTS=${QDB_DROP_TABLE_IF_EXISTS:-""}
+# If not already set, disable flag for dropping tables if they exist.
+# WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE TABLE INFORMATION!
+# If QDB_DROP_TABLES_IF_EXIST is "YES", the table pointed by variable
+# QDB_TABLE_MONITORING_KPIS will be dropped while checking/deploying QuestDB.
+export QDB_DROP_TABLES_IF_EXIST=${QDB_DROP_TABLES_IF_EXIST:-""}
 
 # If not already set, disable flag for re-deploying QuestDB from scratch.
 # WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE DATABASE INFORMATION!
diff --git a/deploy/crdb.sh b/deploy/crdb.sh
index 98d011f19..4e8cfe2c3 100755
--- a/deploy/crdb.sh
+++ b/deploy/crdb.sh
@@ -66,9 +66,6 @@ CRDB_MANIFESTS_PATH="manifests/cockroachdb"
 # Create a tmp folder for files modified during the deployment
 TMP_MANIFESTS_FOLDER="$TMP_FOLDER/manifests"
 mkdir -p $TMP_MANIFESTS_FOLDER
-TMP_LOGS_FOLDER="$TMP_FOLDER/logs"
-mkdir -p $TMP_LOGS_FOLDER
-CRDB_LOG_FILE="$TMP_LOGS_FOLDER/crdb_deploy.log"
 
 function crdb_deploy_single() {
     echo "CockroachDB Namespace"
diff --git a/deploy/nats.sh b/deploy/nats.sh
index 115a18530..9edbc7765 100755
--- a/deploy/nats.sh
+++ b/deploy/nats.sh
@@ -31,14 +31,6 @@ export NATS_REDEPLOY=${NATS_REDEPLOY:-""}
 # Automated steps start here
 ########################################################################################################################
 
-# Constants
-TMP_FOLDER="./tmp"
-NATS_MANIFESTS_PATH="manifests/nats"
-
-# Create a tmp folder for files modified during the deployment
-TMP_MANIFESTS_FOLDER="$TMP_FOLDER/manifests"
-mkdir -p $TMP_MANIFESTS_FOLDER
-
 function nats_deploy_single() {
     echo "NATS Namespace"
     echo ">>> Create NATS Namespace (if missing)"
diff --git a/deploy/qdb.sh b/deploy/qdb.sh
index d9a4de353..a65408804 100755
--- a/deploy/qdb.sh
+++ b/deploy/qdb.sh
@@ -21,20 +21,20 @@
 # If not already set, set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE=${QDB_NAMESPACE:-"qdb"}
 
-# If not already set, set the database username to be used by Monitoring.
+# If not already set, set the database username to be used for QuestDB.
 export QDB_USERNAME=${QDB_USERNAME:-"admin"}
 
-# If not already set, set the database user's password to be used by Monitoring.
+# If not already set, set the database user's password to be used for QuestDB.
 export QDB_PASSWORD=${QDB_PASSWORD:-"quest"}
 
-# If not already set, set the table name to be used by Monitoring.
-export QDB_TABLE=${QDB_TABLE:-"tfs_monitoring"}
+# If not already set, set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS=${QDB_TABLE_MONITORING_KPIS:-"tfs_monitoring_kpis"}
 
-## If not already set, disable flag for dropping table if exists.
-## WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE TABLE INFORMATION!
-## If QDB_DROP_TABLE_IF_EXISTS is "YES", the table pointed by variable QDB_TABLE will be dropped while
-## checking/deploying QuestDB.
-#export QDB_DROP_TABLE_IF_EXISTS=${QDB_DROP_TABLE_IF_EXISTS:-""}
+# If not already set, disable flag for dropping tables if they exist.
+# WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE TABLE INFORMATION!
+# If QDB_DROP_TABLES_IF_EXIST is "YES", the table pointed by variable
+# QDB_TABLE_MONITORING_KPIS will be dropped while checking/deploying QuestDB.
+export QDB_DROP_TABLES_IF_EXIST=${QDB_DROP_TABLES_IF_EXIST:-""}
 
 # If not already set, disable flag for re-deploying QuestDB from scratch.
 # WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE DATABASE INFORMATION!
@@ -52,9 +52,6 @@ QDB_MANIFESTS_PATH="manifests/questdb"
 
 # Create a tmp folder for files modified during the deployment
 TMP_MANIFESTS_FOLDER="$TMP_FOLDER/manifests"
-TMP_LOGS_FOLDER="$TMP_FOLDER/logs"
-QDB_LOG_FILE="$TMP_LOGS_FOLDER/qdb_deploy.log"
-mkdir -p $TMP_LOGS_FOLDER
 
 function qdb_deploy() {
     echo "QuestDB Namespace"
@@ -147,19 +144,18 @@ function qdb_undeploy() {
     echo
 }
 
-# TODO: implement method to drop table
-#function qdb_drop_table() {
-#    echo "Drop table if exists"
-#    QDB_CLIENT_URL="postgresql://${QDB_USERNAME}:${QDB_PASSWORD}@questdb-0:${QDB_SQL_PORT}/defaultdb?sslmode=require"
-#    kubectl exec -it --namespace ${QDB_NAMESPACE} questdb-0 -- \
-#        ./qdb sql --certs-dir=/qdb/qdb-certs --url=${QDB_CLIENT_URL} \
-#        --execute "DROP TABLE IF EXISTS ${QDB_TABLE};"
-#    echo
-#}
+function qdb_drop_tables() {
+    QDB_HOST=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.clusterIP}')
+    QDB_PORT=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
+
+    echo "Drop tables, if exist"
+    curl "http://${QDB_HOST}:${QDB_PORT}/exec?fmt=json&query=DROP+TABLE+IF+EXISTS+${QDB_TABLE_MONITORING_KPIS}+;"
+    echo
+}
 
 if [ "$QDB_REDEPLOY" == "YES" ]; then
     qdb_undeploy
-#elif [ "$QDB_DROP_TABLE_IF_EXISTS" == "YES" ]; then
-#    qdb_drop_table
+elif [ "$QDB_DROP_TABLES_IF_EXIST" == "YES" ]; then
+    qdb_drop_tables
 fi
 qdb_deploy
diff --git a/deploy/tfs.sh b/deploy/tfs.sh
index 1f62adcd5..2bacc8cac 100755
--- a/deploy/tfs.sh
+++ b/deploy/tfs.sh
@@ -18,18 +18,21 @@
 # Read deployment settings
 ########################################################################################################################
 
+
+# ----- TeraFlowSDN ------------------------------------------------------------
+
 # If not already set, set the URL of the Docker registry where the images will be uploaded to.
 # By default, assume internal MicroK8s registry is used.
 export TFS_REGISTRY_IMAGES=${TFS_REGISTRY_IMAGES:-"http://localhost:32000/tfs/"}
 
-# If not already set, set the list of components you want to build images for, and deploy.
+# If not already set, set the list of components, separated by spaces, you want to build images for, and deploy.
 # By default, only basic components are deployed
-export TFS_COMPONENTS=${TFS_COMPONENTS:-"context device monitoring service compute webui"}
+export TFS_COMPONENTS=${TFS_COMPONENTS:-"context device automation monitoring pathcomp service slice compute webui load_generator"}
 
 # If not already set, set the tag you want to use for your images.
 export TFS_IMAGE_TAG=${TFS_IMAGE_TAG:-"dev"}
 
-# If not already set, set the name of the Kubernetes namespace to deploy to.
+# If not already set, set the name of the Kubernetes namespace to deploy TFS to.
 export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
 
 # If not already set, set additional manifest files to be applied after the deployment
@@ -38,10 +41,13 @@ export TFS_EXTRA_MANIFESTS=${TFS_EXTRA_MANIFESTS:-""}
 # If not already set, set the new Grafana admin password
 export TFS_GRAFANA_PASSWORD=${TFS_GRAFANA_PASSWORD:-"admin123+"}
 
-# If not already set, disable skip-build flag.
+# If not already set, disable skip-build flag to rebuild the Docker images.
 # If TFS_SKIP_BUILD is "YES", the containers are not rebuilt-retagged-repushed and existing ones are used.
 export TFS_SKIP_BUILD=${TFS_SKIP_BUILD:-""}
 
+
+# ----- CockroachDB ------------------------------------------------------------
+
 # If not already set, set the namespace where CockroackDB will be deployed.
 export CRDB_NAMESPACE=${CRDB_NAMESPACE:-"crdb"}
 
@@ -54,20 +60,26 @@ export CRDB_PASSWORD=${CRDB_PASSWORD:-"tfs123"}
 # If not already set, set the database name to be used by Context.
 export CRDB_DATABASE=${CRDB_DATABASE:-"tfs"}
 
+
+# ----- NATS -------------------------------------------------------------------
+
 # If not already set, set the namespace where NATS will be deployed.
 export NATS_NAMESPACE=${NATS_NAMESPACE:-"nats"}
 
+
+# ----- QuestDB ----------------------------------------------------------------
+
 # If not already set, set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE=${QDB_NAMESPACE:-"qdb"}
 
-# If not already set, set the database username to be used by Monitoring.
+# If not already set, set the database username to be used for QuestDB.
 export QDB_USERNAME=${QDB_USERNAME:-"admin"}
 
-# If not already set, set the database user's password to be used by Monitoring.
+# If not already set, set the database user's password to be used for QuestDB.
 export QDB_PASSWORD=${QDB_PASSWORD:-"quest"}
 
-# If not already set, set the table name to be used by Monitoring.
-export QDB_TABLE=${QDB_TABLE:-"tfs_monitoring"}
+# If not already set, set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS=${QDB_TABLE_MONITORING_KPIS:-"tfs_monitoring_kpis"}
 
 
 ########################################################################################################################
@@ -118,7 +130,7 @@ kubectl create secret generic qdb-data --namespace ${TFS_K8S_NAMESPACE} --type='
     --from-literal=METRICSDB_REST_PORT=${QDB_HTTP_PORT} \
     --from-literal=METRICSDB_ILP_PORT=${QDB_ILP_PORT} \
     --from-literal=METRICSDB_SQL_PORT=${QDB_SQL_PORT} \
-    --from-literal=METRICSDB_TABLE=${QDB_TABLE} \
+    --from-literal=METRICSDB_TABLE_MONITORING_KPIS=${QDB_TABLE_MONITORING_KPIS} \
     --from-literal=METRICSDB_USERNAME=${QDB_USERNAME} \
     --from-literal=METRICSDB_PASSWORD=${QDB_PASSWORD}
 printf "\n"
@@ -301,7 +313,8 @@ if [[ "$TFS_COMPONENTS" == *"webui"* ]] && [[ "$TFS_COMPONENTS" == *"monitoring"
     # Configure Grafana Admin Password
     # Ref: https://grafana.com/docs/grafana/latest/http_api/user/#change-password
     GRAFANA_URL_DEFAULT="http://${GRAFANA_USERNAME}:${GRAFANA_PASSWORD}@${GRAFANA_URL}"
-    echo "Connecting to grafana at URL: ${GRAFANA_URL_DEFAULT}..."
+
+    echo ">> Updating Grafana 'admin' password..."
     curl -X PUT -H "Content-Type: application/json" -d '{
         "oldPassword": "'${GRAFANA_PASSWORD}'",
         "newPassword": "'${TFS_GRAFANA_PASSWORD}'",
@@ -314,15 +327,14 @@ if [[ "$TFS_COMPONENTS" == *"webui"* ]] && [[ "$TFS_COMPONENTS" == *"monitoring"
     echo "export GRAFANA_URL_UPDATED=${GRAFANA_URL_UPDATED}" >> $ENV_VARS_SCRIPT
 
     # Ref: https://grafana.com/docs/grafana/latest/http_api/data_source/
-    # TODO: replace user, password and database by variables to be saved
     QDB_HOST_PORT="${METRICSDB_HOSTNAME}:${QDB_SQL_PORT}"
-    echo "Creating a datasource..."
+    echo ">> Creating datasources..."
     curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d '{
         "access"   : "proxy",
         "type"     : "postgres",
-        "name"     : "questdb",
+        "name"     : "questdb-mon-kpi",
         "url"      : "'${QDB_HOST_PORT}'",
-        "database" : "'${QDB_TABLE}'",
+        "database" : "'${QDB_TABLE_MONITORING_KPIS}'",
         "user"     : "'${QDB_USERNAME}'",
         "basicAuth": false,
         "isDefault": true,
@@ -342,16 +354,17 @@ if [[ "$TFS_COMPONENTS" == *"webui"* ]] && [[ "$TFS_COMPONENTS" == *"monitoring"
     }' ${GRAFANA_URL_UPDATED}/api/datasources
     echo
 
-    # Create Monitoring Dashboard
+    echo ">> Creating dashboards..."
     # Ref: https://grafana.com/docs/grafana/latest/http_api/dashboard/
-    curl -X POST -H "Content-Type: application/json" \
-        -d '@src/webui/grafana_dashboard_psql.json' \
+    curl -X POST -H "Content-Type: application/json" -d '@src/webui/grafana_db_mon_kpis_psql.json' \
         ${GRAFANA_URL_UPDATED}/api/dashboards/db
     echo
 
-    DASHBOARD_URL="${GRAFANA_URL_UPDATED}/api/dashboards/uid/tf-l3-monit"
+    echo ">> Staring dashboards..."
+    DASHBOARD_URL="${GRAFANA_URL_UPDATED}/api/dashboards/uid/tfs-l3-monit"
     DASHBOARD_ID=$(curl -s "${DASHBOARD_URL}" | jq '.dashboard.id')
     curl -X POST ${GRAFANA_URL_UPDATED}/api/user/stars/dashboard/${DASHBOARD_ID}
+    echo
 
     printf "\n\n"
 fi
diff --git a/my_deploy.sh b/my_deploy.sh
index 6f0e64afe..1efea75bb 100755
--- a/my_deploy.sh
+++ b/my_deploy.sh
@@ -56,7 +56,7 @@ export CRDB_DATABASE="tfs"
 # See ./deploy/all.sh or ./deploy/crdb.sh for additional details
 export CRDB_DEPLOY_MODE="single"
 
-# Disable flag for dropping database, if exists.
+# Disable flag for dropping database, if it exists.
 export CRDB_DROP_DATABASE_IF_EXISTS=""
 
 # Disable flag for re-deploying CockroachDB from scratch.
@@ -74,20 +74,20 @@ export NATS_REDEPLOY=""
 
 # ----- QuestDB ----------------------------------------------------------------
 
-# If not already set, set the namespace where QuestDB will be deployed.
+# Set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE="qdb"
 
-# If not already set, set the database username to be used by Monitoring.
+# Set the database username to be used for QuestDB.
 export QDB_USERNAME="admin"
 
-# If not already set, set the database user's password to be used by Monitoring.
+# Set the database user's password to be used for QuestDB.
 export QDB_PASSWORD="quest"
 
-# If not already set, set the table name to be used by Monitoring.
-export QDB_TABLE="tfs_monitoring"
+# Set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
 
-## If not already set, disable flag for dropping table if exists.
-#export QDB_DROP_TABLE_IF_EXISTS=""
+# Disable flag for dropping tables if they exist.
+export QDB_DROP_TABLES_IF_EXIST=""
 
-# If not already set, disable flag for re-deploying QuestDB from scratch.
+# Disable flag for re-deploying QuestDB from scratch.
 export QDB_REDEPLOY=""
diff --git a/src/tests/benchmark/policy/deploy_specs.sh b/src/tests/benchmark/policy/deploy_specs.sh
index 12a45ef92..7d408f003 100755
--- a/src/tests/benchmark/policy/deploy_specs.sh
+++ b/src/tests/benchmark/policy/deploy_specs.sh
@@ -4,7 +4,7 @@
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
-#     http://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,
@@ -12,21 +12,19 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Set the URL of your local Docker registry where the images will be uploaded to.
-export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/"
+
+# ----- TeraFlowSDN ------------------------------------------------------------
+
+# Set the URL of the internal MicroK8s Docker registry where the images will be uploaded to.
+export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by spaces, you want to build images for, and deploy.
-# Supported components are:
-#   context device automation policy service compute monitoring webui
-#   interdomain slice pathcomp dlt
-#   dbscanserving opticalattackmitigator opticalattackdetector
-#   l3_attackmitigator l3_centralizedattackdetector l3_distributedattackdetector
 export TFS_COMPONENTS="context device automation monitoring pathcomp service slice compute webui"
 
 # Set the tag you want to use for your images.
 export TFS_IMAGE_TAG="dev"
 
-# Set the name of the Kubernetes namespace to deploy to.
+# Set the name of the Kubernetes namespace to deploy TFS to.
 export TFS_K8S_NAMESPACE="tfs"
 
 # Set additional manifest files to be applied after the deployment
@@ -35,6 +33,60 @@ export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml"
 # Set the new Grafana admin password
 export TFS_GRAFANA_PASSWORD="admin123+"
 
-# If not already set, disable skip-build flag.
-# If TFS_SKIP_BUILD is "YES", the containers are not rebuilt-retagged-repushed and existing ones are used.
-export TFS_SKIP_BUILD=${TFS_SKIP_BUILD:-""}
+# Disable skip-build flag to rebuild the Docker images.
+export TFS_SKIP_BUILD=""
+
+
+# ----- CockroachDB ------------------------------------------------------------
+
+# Set the namespace where CockroackDB will be deployed.
+export CRDB_NAMESPACE="crdb"
+
+# Set the database username to be used by Context.
+export CRDB_USERNAME="tfs"
+
+# Set the database user's password to be used by Context.
+export CRDB_PASSWORD="tfs123"
+
+# Set the database name to be used by Context.
+export CRDB_DATABASE="tfs"
+
+# Set CockroachDB installation mode to 'single'. This option is convenient for development and testing.
+# See ./deploy/all.sh or ./deploy/crdb.sh for additional details
+export CRDB_DEPLOY_MODE="single"
+
+# Disable flag for dropping database, if it exists.
+export CRDB_DROP_DATABASE_IF_EXISTS=""
+
+# Disable flag for re-deploying CockroachDB from scratch.
+export CRDB_REDEPLOY=""
+
+
+# ----- NATS -------------------------------------------------------------------
+
+# Set the namespace where NATS will be deployed.
+export NATS_NAMESPACE="nats"
+
+# Disable flag for re-deploying NATS from scratch.
+export NATS_REDEPLOY=""
+
+
+# ----- QuestDB ----------------------------------------------------------------
+
+# Set the namespace where QuestDB will be deployed.
+export QDB_NAMESPACE="qdb"
+
+# Set the database username to be used for QuestDB.
+export QDB_USERNAME="admin"
+
+# Set the database user's password to be used for QuestDB.
+export QDB_PASSWORD="quest"
+
+# Set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
+
+# Disable flag for dropping tables if they exist.
+export QDB_DROP_TABLES_IF_EXIST=""
+
+# Disable flag for re-deploying QuestDB from scratch.
+export QDB_REDEPLOY=""
diff --git a/src/tests/ecoc22/deploy_specs.sh b/src/tests/ecoc22/deploy_specs.sh
index 874774e1c..6c3d9db66 100755
--- a/src/tests/ecoc22/deploy_specs.sh
+++ b/src/tests/ecoc22/deploy_specs.sh
@@ -20,7 +20,6 @@
 export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by spaces, you want to build images for, and deploy.
-#export TFS_COMPONENTS="context device automation monitoring pathcomp service slice compute webui load_generator"
 export TFS_COMPONENTS="context device automation monitoring pathcomp service slice compute webui"
 
 # Set the tag you want to use for your images.
@@ -57,7 +56,7 @@ export CRDB_DATABASE="tfs"
 # See ./deploy/all.sh or ./deploy/crdb.sh for additional details
 export CRDB_DEPLOY_MODE="single"
 
-# Disable flag for dropping database, if exists.
+# Disable flag for dropping database, if it exists.
 export CRDB_DROP_DATABASE_IF_EXISTS=""
 
 # Disable flag for re-deploying CockroachDB from scratch.
@@ -75,20 +74,20 @@ export NATS_REDEPLOY=""
 
 # ----- QuestDB ----------------------------------------------------------------
 
-# If not already set, set the namespace where QuestDB will be deployed.
+# Set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE="qdb"
 
-# If not already set, set the database username to be used by Monitoring.
+# Set the database username to be used for QuestDB.
 export QDB_USERNAME="admin"
 
-# If not already set, set the database user's password to be used by Monitoring.
+# Set the database user's password to be used for QuestDB.
 export QDB_PASSWORD="quest"
 
-# If not already set, set the table name to be used by Monitoring.
-export QDB_TABLE="tfs_monitoring"
+# Set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
 
-## If not already set, disable flag for dropping table if exists.
-#export QDB_DROP_TABLE_IF_EXISTS=""
+# Disable flag for dropping tables if they exist.
+export QDB_DROP_TABLES_IF_EXIST=""
 
-# If not already set, disable flag for re-deploying QuestDB from scratch.
+# Disable flag for re-deploying QuestDB from scratch.
 export QDB_REDEPLOY=""
diff --git a/src/tests/ofc22/deploy_specs.sh b/src/tests/ofc22/deploy_specs.sh
index 874774e1c..6c3d9db66 100755
--- a/src/tests/ofc22/deploy_specs.sh
+++ b/src/tests/ofc22/deploy_specs.sh
@@ -20,7 +20,6 @@
 export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by spaces, you want to build images for, and deploy.
-#export TFS_COMPONENTS="context device automation monitoring pathcomp service slice compute webui load_generator"
 export TFS_COMPONENTS="context device automation monitoring pathcomp service slice compute webui"
 
 # Set the tag you want to use for your images.
@@ -57,7 +56,7 @@ export CRDB_DATABASE="tfs"
 # See ./deploy/all.sh or ./deploy/crdb.sh for additional details
 export CRDB_DEPLOY_MODE="single"
 
-# Disable flag for dropping database, if exists.
+# Disable flag for dropping database, if it exists.
 export CRDB_DROP_DATABASE_IF_EXISTS=""
 
 # Disable flag for re-deploying CockroachDB from scratch.
@@ -75,20 +74,20 @@ export NATS_REDEPLOY=""
 
 # ----- QuestDB ----------------------------------------------------------------
 
-# If not already set, set the namespace where QuestDB will be deployed.
+# Set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE="qdb"
 
-# If not already set, set the database username to be used by Monitoring.
+# Set the database username to be used for QuestDB.
 export QDB_USERNAME="admin"
 
-# If not already set, set the database user's password to be used by Monitoring.
+# Set the database user's password to be used for QuestDB.
 export QDB_PASSWORD="quest"
 
-# If not already set, set the table name to be used by Monitoring.
-export QDB_TABLE="tfs_monitoring"
+# Set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
 
-## If not already set, disable flag for dropping table if exists.
-#export QDB_DROP_TABLE_IF_EXISTS=""
+# Disable flag for dropping tables if they exist.
+export QDB_DROP_TABLES_IF_EXIST=""
 
-# If not already set, disable flag for re-deploying QuestDB from scratch.
+# Disable flag for re-deploying QuestDB from scratch.
 export QDB_REDEPLOY=""
-- 
GitLab


From 35e7c4c9dd7eea80109cbc1bfbf15be9daa37ffd Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 12:53:39 +0000
Subject: [PATCH 063/229] WebUI component:

- Added Grafana dashboard for slice grouping
---
 src/webui/grafana_db_slc_grps_psql.json | 176 ++++++++++++++++++++++++
 1 file changed, 176 insertions(+)
 create mode 100644 src/webui/grafana_db_slc_grps_psql.json

diff --git a/src/webui/grafana_db_slc_grps_psql.json b/src/webui/grafana_db_slc_grps_psql.json
new file mode 100644
index 000000000..0b38a7c7b
--- /dev/null
+++ b/src/webui/grafana_db_slc_grps_psql.json
@@ -0,0 +1,176 @@
+{"overwrite": true, "folderId": 0, "dashboard":
+  {
+    "id": null,
+    "annotations": {
+      "list": [
+        {
+          "builtIn": 1,
+          "datasource": {
+            "type": "grafana",
+            "uid": "-- Grafana --"
+          },
+          "enable": true,
+          "hide": true,
+          "iconColor": "rgba(0, 211, 255, 1)",
+          "name": "Annotations & Alerts",
+          "target": {
+            "limit": 100,
+            "matchAny": false,
+            "tags": [],
+            "type": "dashboard"
+          },
+          "type": "dashboard"
+        }
+      ]
+    },
+    "editable": true,
+    "fiscalYearStartMonth": 0,
+    "graphTooltip": 0,
+    "links": [],
+    "liveNow": false,
+    "panels": [
+      {
+        "datasource": {
+          "type": "postgres",
+          "uid": "questdb-slc-grp"
+        },
+        "gridPos": {
+          "h": 21,
+          "w": 11,
+          "x": 0,
+          "y": 0
+        },
+        "id": 2,
+        "options": {
+          "ReferenceLines": [],
+          "border": {
+            "color": "yellow",
+            "size": 0
+          },
+          "fieldSets": [
+            {
+              "col": 6,
+              "color": "#C4162A",
+              "colorCol": 3,
+              "dotSize": 2,
+              "hidden": false,
+              "lineSize": 1,
+              "lineType": "none",
+              "polynomialOrder": 3,
+              "sizeCol": -7
+            },
+            {
+              "col": 5,
+              "color": "#edcd7d",
+              "colorCol": 3,
+              "dotSize": 2,
+              "hidden": false,
+              "lineSize": 1,
+              "lineType": "none",
+              "polynomialOrder": 3,
+              "sizeCol": -2
+            }
+          ],
+          "grid": {
+            "color": "gray"
+          },
+          "label": {
+            "col": -1,
+            "color": "#CCC",
+            "textSize": 2
+          },
+          "legend": {
+            "show": false,
+            "size": 0
+          },
+          "xAxis": {
+            "col": 4,
+            "inverted": false
+          },
+          "xAxisExtents": {
+            "min": 0,
+            "max": 100
+          },
+          "xAxisTitle": {
+            "text": "Availability %",
+            "color": "white",
+            "textSize": 2,
+            "rotated": false,
+            "logScale": false,
+            "fontSize": 4,
+            "fontColor": "white"
+          },
+          "xMargins": {
+            "lower": 30,
+            "upper": 10
+          },
+          "yAxisExtents": {
+            "min": 0,
+            "max": 100
+          },
+          "yAxisTitle": {
+            "text": "Capacity Gb/s",
+            "color": "#ccccdc",
+            "textSize": 2,
+            "rotated": true,
+            "logScale": false,
+            "fontSize": 4,
+            "fontColor": "white"
+          },
+          "yMargins": {
+            "lower": 20,
+            "upper": 20
+          }
+        },
+        "targets": [
+          {
+            "datasource": {
+              "type": "postgres",
+              "uid": "yTIXTo14z"
+            },
+            "format": "table",
+            "group": [],
+            "hide": false,
+            "metricColumn": "none",
+            "rawQuery": true,
+            "rawSql": "SELECT timestamp as \"time\", slice_uuid, slice_group, slice_color, slice_availability, slice_capacity, slice_capacity_center\nFROM slice_groups\nWHERE $__timeFilter(timestamp);",
+            "refId": "A",
+            "select": [
+              [
+                {
+                  "params": [
+                    "value"
+                  ],
+                  "type": "column"
+                }
+              ]
+            ],
+            "table": "slice_groups",
+            "timeColumn": "timestamp",
+            "where": []
+          }
+        ],
+        "title": "Slice Groups",
+        "transformations": [],
+        "type": "michaeldmoore-scatter-panel"
+      }
+    ],
+    "refresh": "5s",
+    "schemaVersion": 36,
+    "style": "dark",
+    "tags": [],
+    "templating": {
+      "list": []
+    },
+    "time": {
+      "from": "now-5m",
+      "to": "now"
+    },
+    "timepicker": {},
+    "timezone": "",
+    "title": "Slice Grouping",
+    "uid": "tfs-slice-grps",
+    "version": 2,
+    "weekStart": ""
+  }
+}
-- 
GitLab


From 947de0bbf10a04181de25464b8354ecb4c63e774 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 12:54:42 +0000
Subject: [PATCH 064/229] Deploy Scripts:

- added support for deploying Slice Grouping monitoring table and Grafana dashboard
---
 deploy/all.sh |  8 ++++++--
 deploy/qdb.sh |  9 +++++++--
 deploy/tfs.sh | 43 +++++++++++++++++++++++++++++++++++++++++++
 my_deploy.sh  |  7 +++++--
 4 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/deploy/all.sh b/deploy/all.sh
index 09239afed..6f5592cb4 100755
--- a/deploy/all.sh
+++ b/deploy/all.sh
@@ -110,10 +110,14 @@ export QDB_PASSWORD=${QDB_PASSWORD:-"quest"}
 # If not already set, set the table name to be used by Monitoring for KPIs.
 export QDB_TABLE_MONITORING_KPIS=${QDB_TABLE_MONITORING_KPIS:-"tfs_monitoring_kpis"}
 
+# If not already set, set the table name to be used by Slice for plotting groups.
+export QDB_TABLE_SLICE_GROUPS=${QDB_TABLE_SLICE_GROUPS:-"tfs_slice_groups"}
+
 # If not already set, disable flag for dropping tables if they exist.
 # WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE TABLE INFORMATION!
-# If QDB_DROP_TABLES_IF_EXIST is "YES", the table pointed by variable
-# QDB_TABLE_MONITORING_KPIS will be dropped while checking/deploying QuestDB.
+# If QDB_DROP_TABLES_IF_EXIST is "YES", the tables pointed by variables
+# QDB_TABLE_MONITORING_KPIS and QDB_TABLE_SLICE_GROUPS will be dropped while 
+# checking/deploying QuestDB.
 export QDB_DROP_TABLES_IF_EXIST=${QDB_DROP_TABLES_IF_EXIST:-""}
 
 # If not already set, disable flag for re-deploying QuestDB from scratch.
diff --git a/deploy/qdb.sh b/deploy/qdb.sh
index a65408804..df11c25e8 100755
--- a/deploy/qdb.sh
+++ b/deploy/qdb.sh
@@ -30,10 +30,14 @@ export QDB_PASSWORD=${QDB_PASSWORD:-"quest"}
 # If not already set, set the table name to be used by Monitoring for KPIs.
 export QDB_TABLE_MONITORING_KPIS=${QDB_TABLE_MONITORING_KPIS:-"tfs_monitoring_kpis"}
 
+# If not already set, set the table name to be used by Slice for plotting groups.
+export QDB_TABLE_SLICE_GROUPS=${QDB_TABLE_SLICE_GROUPS:-"tfs_slice_groups"}
+
 # If not already set, disable flag for dropping tables if they exist.
 # WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE TABLE INFORMATION!
-# If QDB_DROP_TABLES_IF_EXIST is "YES", the table pointed by variable
-# QDB_TABLE_MONITORING_KPIS will be dropped while checking/deploying QuestDB.
+# If QDB_DROP_TABLES_IF_EXIST is "YES", the table pointed by variables
+# QDB_TABLE_MONITORING_KPIS and QDB_TABLE_SLICE_GROUPS will be dropped
+# while checking/deploying QuestDB.
 export QDB_DROP_TABLES_IF_EXIST=${QDB_DROP_TABLES_IF_EXIST:-""}
 
 # If not already set, disable flag for re-deploying QuestDB from scratch.
@@ -150,6 +154,7 @@ function qdb_drop_tables() {
 
     echo "Drop tables, if exist"
     curl "http://${QDB_HOST}:${QDB_PORT}/exec?fmt=json&query=DROP+TABLE+IF+EXISTS+${QDB_TABLE_MONITORING_KPIS}+;"
+    curl "http://${QDB_HOST}:${QDB_PORT}/exec?fmt=json&query=DROP+TABLE+IF+EXISTS+${QDB_TABLE_SLICE_GROUPS}+;"
     echo
 }
 
diff --git a/deploy/tfs.sh b/deploy/tfs.sh
index 2bacc8cac..68c086c4f 100755
--- a/deploy/tfs.sh
+++ b/deploy/tfs.sh
@@ -81,6 +81,9 @@ export QDB_PASSWORD=${QDB_PASSWORD:-"quest"}
 # If not already set, set the table name to be used by Monitoring for KPIs.
 export QDB_TABLE_MONITORING_KPIS=${QDB_TABLE_MONITORING_KPIS:-"tfs_monitoring_kpis"}
 
+# If not already set, set the table name to be used by Slice for plotting groups.
+export QDB_TABLE_SLICE_GROUPS=${QDB_TABLE_SLICE_GROUPS:-"tfs_slice_groups"}
+
 
 ########################################################################################################################
 # Automated steps start here
@@ -131,6 +134,7 @@ kubectl create secret generic qdb-data --namespace ${TFS_K8S_NAMESPACE} --type='
     --from-literal=METRICSDB_ILP_PORT=${QDB_ILP_PORT} \
     --from-literal=METRICSDB_SQL_PORT=${QDB_SQL_PORT} \
     --from-literal=METRICSDB_TABLE_MONITORING_KPIS=${QDB_TABLE_MONITORING_KPIS} \
+    --from-literal=METRICSDB_TABLE_SLICE_GROUPS=${QDB_TABLE_SLICE_GROUPS} \
     --from-literal=METRICSDB_USERNAME=${QDB_USERNAME} \
     --from-literal=METRICSDB_PASSWORD=${QDB_PASSWORD}
 printf "\n"
@@ -326,6 +330,11 @@ if [[ "$TFS_COMPONENTS" == *"webui"* ]] && [[ "$TFS_COMPONENTS" == *"monitoring"
     GRAFANA_URL_UPDATED="http://${GRAFANA_USERNAME}:${TFS_GRAFANA_PASSWORD}@${GRAFANA_URL}"
     echo "export GRAFANA_URL_UPDATED=${GRAFANA_URL_UPDATED}" >> $ENV_VARS_SCRIPT
 
+    echo ">> Installing Scatter Plot plugin..."
+    curl -X POST -H "Content-Type: application/json" -H "Content-Length: 0" \
+        ${GRAFANA_URL_UPDATED}/api/plugins/michaeldmoore-scatter-panel/install
+    echo
+
     # Ref: https://grafana.com/docs/grafana/latest/http_api/data_source/
     QDB_HOST_PORT="${METRICSDB_HOSTNAME}:${QDB_SQL_PORT}"
     echo ">> Creating datasources..."
@@ -354,17 +363,51 @@ if [[ "$TFS_COMPONENTS" == *"webui"* ]] && [[ "$TFS_COMPONENTS" == *"monitoring"
     }' ${GRAFANA_URL_UPDATED}/api/datasources
     echo
 
+    curl -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d '{
+        "access"   : "proxy",
+        "type"     : "postgres",
+        "name"     : "questdb-slc-grp",
+        "url"      : "'${QDB_HOST_PORT}'",
+        "database" : "'${QDB_TABLE_SLICE_GROUPS}'",
+        "user"     : "'${QDB_USERNAME}'",
+        "basicAuth": false,
+        "isDefault": false,
+        "jsonData" : {
+            "sslmode"               : "disable",
+            "postgresVersion"       : 1100,
+            "maxOpenConns"          : 0,
+            "maxIdleConns"          : 2,
+            "connMaxLifetime"       : 14400,
+            "tlsAuth"               : false,
+            "tlsAuthWithCACert"     : false,
+            "timescaledb"           : false,
+            "tlsConfigurationMethod": "file-path",
+            "tlsSkipVerify"         : true
+        },
+        "secureJsonData": {"password": "'${QDB_PASSWORD}'"}
+    }' ${GRAFANA_URL_UPDATED}/api/datasources
+    printf "\n\n"
+
     echo ">> Creating dashboards..."
     # Ref: https://grafana.com/docs/grafana/latest/http_api/dashboard/
     curl -X POST -H "Content-Type: application/json" -d '@src/webui/grafana_db_mon_kpis_psql.json' \
         ${GRAFANA_URL_UPDATED}/api/dashboards/db
     echo
 
+    curl -X POST -H "Content-Type: application/json" -d '@src/webui/grafana_db_slc_grps_psql.json' \
+        ${GRAFANA_URL_UPDATED}/api/dashboards/db
+    printf "\n\n"
+
     echo ">> Staring dashboards..."
     DASHBOARD_URL="${GRAFANA_URL_UPDATED}/api/dashboards/uid/tfs-l3-monit"
     DASHBOARD_ID=$(curl -s "${DASHBOARD_URL}" | jq '.dashboard.id')
     curl -X POST ${GRAFANA_URL_UPDATED}/api/user/stars/dashboard/${DASHBOARD_ID}
     echo
 
+    DASHBOARD_URL="${GRAFANA_URL_UPDATED}/api/dashboards/uid/tfs-slice-grps"
+    DASHBOARD_ID=$(curl -s "${DASHBOARD_URL}" | jq '.dashboard.id')
+    curl -X POST ${GRAFANA_URL_UPDATED}/api/user/stars/dashboard/${DASHBOARD_ID}
+    echo
+
     printf "\n\n"
 fi
diff --git a/my_deploy.sh b/my_deploy.sh
index 1efea75bb..6a360812b 100755
--- a/my_deploy.sh
+++ b/my_deploy.sh
@@ -57,7 +57,7 @@ export CRDB_DATABASE="tfs"
 export CRDB_DEPLOY_MODE="single"
 
 # Disable flag for dropping database, if it exists.
-export CRDB_DROP_DATABASE_IF_EXISTS=""
+export CRDB_DROP_DATABASE_IF_EXISTS="YES"
 
 # Disable flag for re-deploying CockroachDB from scratch.
 export CRDB_REDEPLOY=""
@@ -86,8 +86,11 @@ export QDB_PASSWORD="quest"
 # Set the table name to be used by Monitoring for KPIs.
 export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
 
+# Set the table name to be used by Slice for plotting groups.
+export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
+
 # Disable flag for dropping tables if they exist.
-export QDB_DROP_TABLES_IF_EXIST=""
+export QDB_DROP_TABLES_IF_EXIST="YES"
 
 # Disable flag for re-deploying QuestDB from scratch.
 export QDB_REDEPLOY=""
-- 
GitLab


From ada162bf56ae1ead03448119297e44b144b0c393 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 12:55:09 +0000
Subject: [PATCH 065/229] Slice component:

- updated monitoring table name
---
 src/slice/service/slice_grouper/MetricsExporter.py | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/slice/service/slice_grouper/MetricsExporter.py b/src/slice/service/slice_grouper/MetricsExporter.py
index d6738ac3e..ce3d88b80 100644
--- a/src/slice/service/slice_grouper/MetricsExporter.py
+++ b/src/slice/service/slice_grouper/MetricsExporter.py
@@ -31,7 +31,7 @@ MSG_ERROR_MAX_RETRIES = 'Maximum number of retries achieved: {:d}'
 METRICSDB_HOSTNAME  = os.environ.get('METRICSDB_HOSTNAME')
 METRICSDB_ILP_PORT  = int(os.environ.get('METRICSDB_ILP_PORT'))
 METRICSDB_REST_PORT = int(os.environ.get('METRICSDB_REST_PORT'))
-METRICSDB_TABLE     = 'slice_groups'
+METRICSDB_TABLE_SLICE_GROUPS = os.environ.get('METRICSDB_TABLE_SLICE_GROUPS')
 
 COLORS = {
     'platinum': '#E5E4E2',
@@ -46,7 +46,7 @@ SQL_MARK_DELETED = "UPDATE {:s} SET is_deleted='true' WHERE slice_uuid='{:s}';"
 class MetricsExporter():
     def create_table(self) -> None:
         sql_query = ' '.join([
-            'CREATE TABLE IF NOT EXISTS {:s} ('.format(str(METRICSDB_TABLE)),
+            'CREATE TABLE IF NOT EXISTS {:s} ('.format(str(METRICSDB_TABLE_SLICE_GROUPS)),
             ','.join([
                 'timestamp TIMESTAMP',
                 'slice_uuid SYMBOL',
@@ -62,9 +62,9 @@ class MetricsExporter():
         try:
             result = self.rest_request(sql_query)
             if not result: raise Exception
-            LOGGER.info('Table {:s} created'.format(str(METRICSDB_TABLE)))
+            LOGGER.info('Table {:s} created'.format(str(METRICSDB_TABLE_SLICE_GROUPS)))
         except Exception as e:
-            LOGGER.warning('Table {:s} cannot be created. {:s}'.format(str(METRICSDB_TABLE), str(e)))
+            LOGGER.warning('Table {:s} cannot be created. {:s}'.format(str(METRICSDB_TABLE_SLICE_GROUPS), str(e)))
             raise
 
     def export_point(
@@ -80,7 +80,7 @@ class MetricsExporter():
         for retry in range(MAX_RETRIES):
             try:
                 with Sender(METRICSDB_HOSTNAME, METRICSDB_ILP_PORT) as sender:
-                    sender.row(METRICSDB_TABLE, symbols=symbols, columns=columns, at=dt_timestamp)
+                    sender.row(METRICSDB_TABLE_SLICE_GROUPS, symbols=symbols, columns=columns, at=dt_timestamp)
                     sender.flush()
                 LOGGER.info(MSG_EXPORT_EXECUTED.format(str(dt_timestamp), str(symbols), str(columns)))
                 return
@@ -91,7 +91,7 @@ class MetricsExporter():
         raise Exception(MSG_ERROR_MAX_RETRIES.format(MAX_RETRIES))
 
     def delete_point(self, slice_uuid : str) -> None:
-        sql_query = SQL_MARK_DELETED.format(str(METRICSDB_TABLE), slice_uuid)
+        sql_query = SQL_MARK_DELETED.format(str(METRICSDB_TABLE_SLICE_GROUPS), slice_uuid)
         try:
             result = self.rest_request(sql_query)
             if not result: raise Exception
-- 
GitLab


From 0f3b8b5171d254487ab5b0483ded23ecb93d31b0 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 13:25:37 +0000
Subject: [PATCH 066/229] Deploy Scripts:

- minor cosmetic changes
---
 deploy/qdb.sh | 1 +
 deploy/tfs.sh | 1 +
 2 files changed, 2 insertions(+)

diff --git a/deploy/qdb.sh b/deploy/qdb.sh
index df11c25e8..d94c000bf 100755
--- a/deploy/qdb.sh
+++ b/deploy/qdb.sh
@@ -154,6 +154,7 @@ function qdb_drop_tables() {
 
     echo "Drop tables, if exist"
     curl "http://${QDB_HOST}:${QDB_PORT}/exec?fmt=json&query=DROP+TABLE+IF+EXISTS+${QDB_TABLE_MONITORING_KPIS}+;"
+    echo
     curl "http://${QDB_HOST}:${QDB_PORT}/exec?fmt=json&query=DROP+TABLE+IF+EXISTS+${QDB_TABLE_SLICE_GROUPS}+;"
     echo
 }
diff --git a/deploy/tfs.sh b/deploy/tfs.sh
index 68c086c4f..16cf5c13b 100755
--- a/deploy/tfs.sh
+++ b/deploy/tfs.sh
@@ -325,6 +325,7 @@ if [[ "$TFS_COMPONENTS" == *"webui"* ]] && [[ "$TFS_COMPONENTS" == *"monitoring"
         "confirmNew" : "'${TFS_GRAFANA_PASSWORD}'"
     }' ${GRAFANA_URL_DEFAULT}/api/user/password
     echo
+    echo
 
     # Updated Grafana API URL
     GRAFANA_URL_UPDATED="http://${GRAFANA_USERNAME}:${TFS_GRAFANA_PASSWORD}@${GRAFANA_URL}"
-- 
GitLab


From 7b66a4b18e3bdd16d0d7d42bc090db7ca6121410 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 13:31:25 +0000
Subject: [PATCH 067/229] Context component:

- removed unneeded log message
---
 src/context/service/database/Constraint.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/context/service/database/Constraint.py b/src/context/service/database/Constraint.py
index 768108d9b..b37d0dcad 100644
--- a/src/context/service/database/Constraint.py
+++ b/src/context/service/database/Constraint.py
@@ -107,7 +107,7 @@ def upsert_constraints(
         #str_stmt = stmt.compile(dialect=postgresql.dialect(), compile_kwargs={"literal_binds": True})
         #LOGGER.warning('delete stmt={:s}'.format(str(str_stmt)))
         constraint_deletes = session.execute(stmt)
-        LOGGER.warning('constraint_deletes.rowcount={:s}'.format(str(constraint_deletes.rowcount)))
+        #LOGGER.warning('constraint_deletes.rowcount={:s}'.format(str(constraint_deletes.rowcount)))
         delete_affected = int(constraint_deletes.rowcount) > 0
 
     upsert_affected = False
-- 
GitLab


From e94ec782fff459850af83692ba4bd80b008ebc3d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 16:37:49 +0000
Subject: [PATCH 068/229] Common - Tools - gRPC - Constraints:

- implemented missing methods
---
 src/common/tools/grpc/Constraints.py | 59 ++++++++++++++++++++++++++--
 1 file changed, 56 insertions(+), 3 deletions(-)

diff --git a/src/common/tools/grpc/Constraints.py b/src/common/tools/grpc/Constraints.py
index 53f7dfd98..07f0b7782 100644
--- a/src/common/tools/grpc/Constraints.py
+++ b/src/common/tools/grpc/Constraints.py
@@ -17,7 +17,7 @@
 
 
 import json
-from typing import Any, Dict, Optional, Tuple
+from typing import Any, Dict, List, Optional, Tuple
 from common.proto.context_pb2 import Constraint, EndPointId
 from common.tools.grpc.Tools import grpc_message_to_json_string
 
@@ -137,7 +137,31 @@ def update_constraint_endpoint_priority(constraints, endpoint_id : EndPointId, p
     constraint.endpoint_priority.priority = priority
     return constraint
 
-def update_constraint_sla_availability(constraints, num_disjoint_paths : int, all_active : bool) -> Constraint:
+def update_constraint_sla_capacity(constraints, capacity_gbps : float) -> Constraint:
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'sla_capacity': continue
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+
+    constraint.sla_capacity.capacity_gbps = capacity_gbps
+    return constraint
+
+def update_constraint_sla_latency(constraints, e2e_latency_ms : float) -> Constraint:
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'sla_latency': continue
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+
+    constraint.sla_latency.e2e_latency_ms = e2e_latency_ms
+    return constraint
+
+def update_constraint_sla_availability(
+    constraints, num_disjoint_paths : int, all_active : bool, availability : float
+) -> Constraint:
     for constraint in constraints:
         if constraint.WhichOneof('constraint') != 'sla_availability': continue
         break   # found, end loop
@@ -147,8 +171,21 @@ def update_constraint_sla_availability(constraints, num_disjoint_paths : int, al
 
     constraint.sla_availability.num_disjoint_paths = num_disjoint_paths
     constraint.sla_availability.all_active = all_active
+    constraint.sla_availability.availability = availability
     return constraint
 
+def update_constraint_sla_isolation(constraints, isolation_levels : List[int]) -> Constraint:
+    for constraint in constraints:
+        if constraint.WhichOneof('constraint') != 'sla_isolation': continue
+        break   # found, end loop
+    else:
+        # not found, add it
+        constraint = constraints.add()      # pylint: disable=no-member
+
+    for isolation_level in isolation_levels:
+        if isolation_level in constraint.sla_isolation.isolation_level: continue
+        constraint.sla_isolation.isolation_level.append(isolation_level)
+    return constraint
 
 def copy_constraints(source_constraints, target_constraints):
     for source_constraint in source_constraints:
@@ -189,11 +226,27 @@ def copy_constraints(source_constraints, target_constraints):
             priority = source_constraint.endpoint_priority.priority
             update_constraint_endpoint_priority(target_constraints, endpoint_id, priority)
 
+        elif constraint_kind == 'sla_capacity':
+            sla_capacity = source_constraint.sla_capacity
+            capacity_gbps = sla_capacity.capacity_gbps
+            update_constraint_sla_capacity(target_constraints, capacity_gbps)
+
+        elif constraint_kind == 'sla_latency':
+            sla_latency = source_constraint.sla_latency
+            e2e_latency_ms = sla_latency.e2e_latency_ms
+            update_constraint_sla_latency(target_constraints, e2e_latency_ms)
+
         elif constraint_kind == 'sla_availability':
             sla_availability = source_constraint.sla_availability
             num_disjoint_paths = sla_availability.num_disjoint_paths
             all_active = sla_availability.all_active
-            update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active)
+            availability = sla_availability.availability
+            update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active, availability)
+
+        elif constraint_kind == 'sla_isolation':
+            sla_isolation = source_constraint.sla_isolation
+            isolation_levels = sla_isolation.isolation_level
+            update_constraint_sla_isolation(target_constraints, isolation_levels)
 
         else:
             raise NotImplementedError('Constraint({:s})'.format(grpc_message_to_json_string(source_constraint)))
-- 
GitLab


From 16f4fa1391055dfeaf4fe94f73fd65dab2c8d440 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 16:38:07 +0000
Subject: [PATCH 069/229] Common - Tools - Object Factory - Constraints:

- implemented missing methods
---
 src/common/tools/object_factory/Constraint.py | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/common/tools/object_factory/Constraint.py b/src/common/tools/object_factory/Constraint.py
index e3c5129fd..ef00e3872 100644
--- a/src/common/tools/object_factory/Constraint.py
+++ b/src/common/tools/object_factory/Constraint.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 import json
-from typing import Any, Dict, Union
+from typing import Any, Dict, List, Union
 
 def json_constraint_custom(constraint_type : str, constraint_value : Union[str, Dict[str, Any]]) -> Dict:
     if not isinstance(constraint_value, str): constraint_value = json.dumps(constraint_value, sort_keys=True)
@@ -29,5 +29,16 @@ def json_constraint_endpoint_location_gps(endpoint_id : Dict, latitude : float,
 def json_constraint_endpoint_priority(endpoint_id : Dict, priority : int) -> Dict:
     return {'endpoint_priority': {'endpoint_id': endpoint_id, 'priority': priority}}
 
-def json_constraint_sla_availability(num_disjoint_paths : int, all_active : bool) -> Dict:
-    return {'sla_availability': {'num_disjoint_paths': num_disjoint_paths, 'all_active': all_active}}
+def json_constraint_sla_availability(num_disjoint_paths : int, all_active : bool, availability : float) -> Dict:
+    return {'sla_availability': {
+        'num_disjoint_paths': num_disjoint_paths, 'all_active': all_active, 'availability': availability
+    }}
+
+def json_constraint_sla_capacity(capacity_gbps : float) -> Dict:
+    return {'sla_capacity': {'capacity_gbps': capacity_gbps}}
+
+def json_constraint_sla_isolation(isolation_levels : List[int]) -> Dict:
+    return {'sla_isolation': {'isolation_level': isolation_levels}}
+
+def json_constraint_sla_latency(e2e_latency_ms : float) -> Dict:
+    return {'sla_latency': {'e2e_latency_ms': e2e_latency_ms}}
-- 
GitLab


From d2ef8068c2356f3a0396342ce714859841897a4d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 16:39:05 +0000
Subject: [PATCH 070/229] Context component:

- fixed check of endpoints in SetService
- fixed check of endpoints in SetSlice
- fixed slice-subslice relationship
---
 src/context/service/database/Service.py           |  7 +++++--
 src/context/service/database/Slice.py             | 11 +++++++----
 src/context/service/database/models/SliceModel.py |  4 ++++
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/context/service/database/Service.py b/src/context/service/database/Service.py
index 4b63a4ae5..a81a80c3c 100644
--- a/src/context/service/database/Service.py
+++ b/src/context/service/database/Service.py
@@ -77,8 +77,11 @@ def service_set(db_engine : Engine, request : Service) -> Tuple[Dict, bool]:
     service_endpoints_data : List[Dict] = list()
     for i,endpoint_id in enumerate(request.service_endpoint_ids):
         endpoint_context_uuid = endpoint_id.topology_id.context_id.context_uuid.uuid
-        if len(endpoint_context_uuid) == 0: endpoint_context_uuid = context_uuid
-        if endpoint_context_uuid not in {raw_context_uuid, context_uuid}:
+        if len(endpoint_context_uuid) == 0:
+            endpoint_context_uuid = context_get_uuid(request.service_id.context_id, allow_random=False)
+        else:
+            endpoint_context_uuid = context_get_uuid(endpoint_id.topology_id.context_id, allow_random=False)
+        if endpoint_context_uuid != context_uuid:
             raise InvalidArgumentException(
                 'request.service_endpoint_ids[{:d}].topology_id.context_id.context_uuid.uuid'.format(i),
                 endpoint_context_uuid,
diff --git a/src/context/service/database/Slice.py b/src/context/service/database/Slice.py
index 7c291e33d..b841b9cc8 100644
--- a/src/context/service/database/Slice.py
+++ b/src/context/service/database/Slice.py
@@ -77,8 +77,11 @@ def slice_set(db_engine : Engine, request : Slice) -> Tuple[Dict, bool]:
     slice_endpoints_data : List[Dict] = list()
     for i,endpoint_id in enumerate(request.slice_endpoint_ids):
         endpoint_context_uuid = endpoint_id.topology_id.context_id.context_uuid.uuid
-        if len(endpoint_context_uuid) == 0: endpoint_context_uuid = context_uuid
-        if endpoint_context_uuid not in {raw_context_uuid, context_uuid}:
+        if len(endpoint_context_uuid) == 0:
+            endpoint_context_uuid = context_get_uuid(request.slice_id.context_id, allow_random=False)
+        else:
+            endpoint_context_uuid = context_get_uuid(endpoint_id.topology_id.context_id, allow_random=False)
+        if endpoint_context_uuid != context_uuid:
             raise InvalidArgumentException(
                 'request.slice_endpoint_ids[{:d}].topology_id.context_id.context_uuid.uuid'.format(i),
                 endpoint_context_uuid,
@@ -210,13 +213,13 @@ def slice_unset(db_engine : Engine, request : Slice) -> Tuple[Dict, bool]:
                 )).delete()
         if len(slice_subslice_uuids) > 0:
             num_deletes += session.query(SliceSubSliceModel)\
-                .filter_by(and_(
+                .filter(and_(
                     SliceSubSliceModel.slice_uuid == slice_uuid,
                     SliceSubSliceModel.subslice_uuid.in_(slice_subslice_uuids)
                 )).delete()
         if len(slice_endpoint_uuids) > 0:
             num_deletes += session.query(SliceEndPointModel)\
-                .filter_by(and_(
+                .filter(and_(
                     SliceEndPointModel.slice_uuid == slice_uuid,
                     SliceEndPointModel.endpoint_uuid.in_(slice_endpoint_uuids)
                 )).delete()
diff --git a/src/context/service/database/models/SliceModel.py b/src/context/service/database/models/SliceModel.py
index 1a562bcd9..6943861c8 100644
--- a/src/context/service/database/models/SliceModel.py
+++ b/src/context/service/database/models/SliceModel.py
@@ -100,3 +100,7 @@ class SliceSubSliceModel(_Base):
 
     slice_uuid    = Column(ForeignKey('slice.slice_uuid', ondelete='CASCADE' ), primary_key=True)
     subslice_uuid = Column(ForeignKey('slice.slice_uuid', ondelete='RESTRICT'), primary_key=True)
+
+    slice    = relationship(
+        'SliceModel', foreign_keys='SliceSubSliceModel.slice_uuid', back_populates='slice_subslices', lazy='joined')
+    subslice = relationship('SliceModel', foreign_keys='SliceSubSliceModel.subslice_uuid', lazy='joined')
-- 
GitLab


From 5c95b835f15263c1223cdc00f9e5a0c3d4cbba5f Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 16:40:03 +0000
Subject: [PATCH 071/229] PathComp component - FrontEnd:

- removed unused import in unitary test
---
 src/pathcomp/frontend/tests/test_unitary.py | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/pathcomp/frontend/tests/test_unitary.py b/src/pathcomp/frontend/tests/test_unitary.py
index fd14c8a7a..d06386231 100644
--- a/src/pathcomp/frontend/tests/test_unitary.py
+++ b/src/pathcomp/frontend/tests/test_unitary.py
@@ -23,7 +23,6 @@ from common.tools.object_factory.Device import json_device_id
 from common.tools.object_factory.EndPoint import json_endpoint_id
 from common.tools.object_factory.Service import json_service_l3nm_planned
 from context.client.ContextClient import ContextClient
-from device.client.DeviceClient import DeviceClient
 from pathcomp.frontend.client.PathCompClient import PathCompClient
 
 # Scenarios:
-- 
GitLab


From 5aff458e37aa3a37befcd30d406bdc0b027933f3 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 16:42:11 +0000
Subject: [PATCH 072/229] WebUI component:

- updated grafana slice-grouping dashboard queries
- updated load-gen request form
---
 src/webui/grafana_db_slc_grps_psql.json       |  8 ++--
 src/webui/service/load_gen/forms.py           | 12 +++---
 src/webui/service/load_gen/routes.py          | 39 +++++++++++--------
 .../service/templates/load_gen/home.html      | 36 ++++++++++-------
 4 files changed, 54 insertions(+), 41 deletions(-)

diff --git a/src/webui/grafana_db_slc_grps_psql.json b/src/webui/grafana_db_slc_grps_psql.json
index 0b38a7c7b..6aa7a478b 100644
--- a/src/webui/grafana_db_slc_grps_psql.json
+++ b/src/webui/grafana_db_slc_grps_psql.json
@@ -126,14 +126,14 @@
           {
             "datasource": {
               "type": "postgres",
-              "uid": "yTIXTo14z"
+              "uid": "questdb-slc-grp"
             },
             "format": "table",
             "group": [],
             "hide": false,
             "metricColumn": "none",
             "rawQuery": true,
-            "rawSql": "SELECT timestamp as \"time\", slice_uuid, slice_group, slice_color, slice_availability, slice_capacity, slice_capacity_center\nFROM slice_groups\nWHERE $__timeFilter(timestamp);",
+            "rawSql": "SELECT timestamp as \"time\", slice_uuid, slice_group, slice_color, slice_availability, slice_capacity, slice_capacity_center, is_deleted\nFROM tfs_slice_groups\nWHERE $__timeFilter(timestamp) AND is_deleted <> 'true';",
             "refId": "A",
             "select": [
               [
@@ -145,7 +145,7 @@
                 }
               ]
             ],
-            "table": "slice_groups",
+            "table": "tfs_slice_groups",
             "timeColumn": "timestamp",
             "where": []
           }
@@ -163,7 +163,7 @@
       "list": []
     },
     "time": {
-      "from": "now-5m",
+      "from": "now-30m",
       "to": "now"
     },
     "timepicker": {},
diff --git a/src/webui/service/load_gen/forms.py b/src/webui/service/load_gen/forms.py
index 3144fbe5d..911d28e44 100644
--- a/src/webui/service/load_gen/forms.py
+++ b/src/webui/service/load_gen/forms.py
@@ -18,7 +18,7 @@ from wtforms.validators import DataRequired, NumberRange
 
 class LoadGenStartForm(FlaskForm):
     num_requests = IntegerField('Num Requests', default=100, validators=[DataRequired(), NumberRange(min=0)])
-    num_generated = IntegerField('Num Generated', render_kw={'readonly': True})
+    num_generated = IntegerField('Num Generated', default=0, render_kw={'readonly': True})
 
     request_type_service_l2nm = BooleanField('Service L2NM', default=False)
     request_type_service_l3nm = BooleanField('Service L3NM', default=False)
@@ -27,17 +27,17 @@ class LoadGenStartForm(FlaskForm):
     request_type_slice_l2nm = BooleanField('Slice L2NM', default=True)
     request_type_slice_l3nm = BooleanField('Slice L3NM', default=False)
 
-    offered_load = FloatField('Offered Load [Erlang]', default=50, validators=[NumberRange(min=1.e-12)])
-    holding_time = FloatField('Holding Time [seconds]', default=10, validators=[NumberRange(min=1.e-12)])
-    inter_arrival_time = FloatField('Inter Arrival Time[seconds]', default=0, validators=[NumberRange(min=1.e-12)])
+    offered_load = FloatField('Offered Load [Erlang]', default=50, validators=[NumberRange(min=0.0)])
+    holding_time = FloatField('Holding Time [seconds]', default=10, validators=[NumberRange(min=0.0)])
+    inter_arrival_time = FloatField('Inter Arrival Time[seconds]', default=0, validators=[NumberRange(min=0.0)])
 
     do_teardown = BooleanField('Do Teardown', default=True)
 
     record_to_dlt = BooleanField('Record to DLT', default=False)
     dlt_domain_id = StringField('DLT Domain Id', default='')
 
-    infinite_loop = BooleanField('Infinite Loop', render_kw={'readonly': True})
-    running = BooleanField('Running', render_kw={'readonly': True})
+    infinite_loop = BooleanField('Infinite Loop', default=False, render_kw={'readonly': True})
+    running = BooleanField('Running', default=False, render_kw={'readonly': True})
 
     submit = SubmitField('Start')
 
diff --git a/src/webui/service/load_gen/routes.py b/src/webui/service/load_gen/routes.py
index 893900908..ab1733013 100644
--- a/src/webui/service/load_gen/routes.py
+++ b/src/webui/service/load_gen/routes.py
@@ -20,6 +20,14 @@ from .forms import LoadGenStartForm, LoadGenStopForm
 
 load_gen = Blueprint('load_gen', __name__, url_prefix='/load_gen')
 
+def make_read_only(field, readonly : bool) -> None:
+    if not hasattr(field, 'render_kw'):
+        field.render_kw = dict(readonly=readonly)
+    elif field.render_kw is None:
+        field.render_kw = dict(readonly=readonly)
+    else:
+        field.render_kw['readonly'] = readonly
+
 @load_gen.route('home', methods=['GET', 'POST'])
 def home():
     load_gen_client = LoadGeneratorClient()
@@ -61,7 +69,7 @@ def home():
             load_gen_client.connect()
             load_gen_client.Stop(Empty())
             load_gen_client.close()
-            flash('Load Generator Stoped.', 'success')
+            flash('Load Generator Stopped.', 'success')
         except Exception as e: # pylint: disable=broad-except
             flash('Problem stopping Load Generator. {:s}'.format(str(e)), 'danger')
 
@@ -88,19 +96,18 @@ def home():
     form_start.request_type_slice_l2nm  .default = RequestTypeEnum.REQUESTTYPE_SLICE_L2NM   in request_types
     form_start.request_type_slice_l3nm  .default = RequestTypeEnum.REQUESTTYPE_SLICE_L3NM   in request_types
 
-    form_start.num_requests      .render_kw['readonly'] = status.running
-    form_start.offered_load      .render_kw['readonly'] = status.running
-    form_start.holding_time      .render_kw['readonly'] = status.running
-    form_start.inter_arrival_time.render_kw['readonly'] = status.running
-    form_start.do_teardown       .render_kw['readonly'] = status.running
-    form_start.record_to_dlt     .render_kw['readonly'] = status.running
-    form_start.dlt_domain_id     .render_kw['readonly'] = status.running
-
-    form_start.request_type_service_l2nm.render_kw['readonly'] = status.running
-    form_start.request_type_service_l3nm.render_kw['readonly'] = status.running
-    form_start.request_type_service_mw  .render_kw['readonly'] = status.running
-    form_start.request_type_service_tapi.render_kw['readonly'] = status.running
-    form_start.request_type_slice_l2nm  .render_kw['readonly'] = status.running
-    form_start.request_type_slice_l3nm  .render_kw['readonly'] = status.running
+    make_read_only(form_start.num_requests             , status.running)
+    make_read_only(form_start.offered_load             , status.running)
+    make_read_only(form_start.holding_time             , status.running)
+    make_read_only(form_start.inter_arrival_time       , status.running)
+    make_read_only(form_start.do_teardown              , status.running)
+    make_read_only(form_start.record_to_dlt            , status.running)
+    make_read_only(form_start.dlt_domain_id            , status.running)
+    make_read_only(form_start.request_type_service_l2nm, status.running)
+    make_read_only(form_start.request_type_service_l3nm, status.running)
+    make_read_only(form_start.request_type_service_mw  , status.running)
+    make_read_only(form_start.request_type_service_tapi, status.running)
+    make_read_only(form_start.request_type_slice_l2nm  , status.running)
+    make_read_only(form_start.request_type_slice_l3nm  , status.running)
 
-    return render_template('load_gen/home.html', form_start=form_start, form_stop=form_stop)
+    return render_template('load_gen/home.html', form_start=form_start, form_stop=form_stop, is_running=status.running)
diff --git a/src/webui/service/templates/load_gen/home.html b/src/webui/service/templates/load_gen/home.html
index 5aa751392..684e60ed5 100644
--- a/src/webui/service/templates/load_gen/home.html
+++ b/src/webui/service/templates/load_gen/home.html
@@ -21,7 +21,9 @@
     <br />
 
     <form id="load_gen_start" method="POST">
+        {% if not is_running %}
         {{ form_start.hidden_tag() }}
+        {% endif %}
         <fieldset>
             <div class="row mb-3">
                 {{ form_start.num_requests.label(class="col-sm-2 col-form-label") }}
@@ -56,12 +58,14 @@
             <div class="row mb-3">
                 <div class="col-sm-2 col-form-label">Service Types:</div>
                 <div class="col-sm-10">
+                    {{ form_start.request_type_slice_l2nm   }} {{ form_start.request_type_slice_l2nm  .label(class="col-sm-3 col-form-label") }}
+                    {{ form_start.request_type_slice_l3nm   }} {{ form_start.request_type_slice_l3nm  .label(class="col-sm-3 col-form-label") }}
+                    <br/>
                     {{ form_start.request_type_service_l2nm }} {{ form_start.request_type_service_l2nm.label(class="col-sm-3 col-form-label") }}
                     {{ form_start.request_type_service_l3nm }} {{ form_start.request_type_service_l3nm.label(class="col-sm-3 col-form-label") }}
+                    <br/>
                     {{ form_start.request_type_service_mw   }} {{ form_start.request_type_service_mw  .label(class="col-sm-3 col-form-label") }}
                     {{ form_start.request_type_service_tapi }} {{ form_start.request_type_service_tapi.label(class="col-sm-3 col-form-label") }}
-                    {{ form_start.request_type_slice_l2nm   }} {{ form_start.request_type_slice_l2nm  .label(class="col-sm-3 col-form-label") }}
-                    {{ form_start.request_type_slice_l3nm   }} {{ form_start.request_type_slice_l3nm  .label(class="col-sm-3 col-form-label") }}
                 </div>
             </div>
             <br />
@@ -112,18 +116,17 @@
             <br />
 
             <div class="row mb-3">
-                {{ form_start.do_teardown(class="form-control") }} {{ form_start.do_teardown.label(class="col-sm-2 col-form-label") }}
-            </div>
-            <br />
-
-            <div class="row mb-3">
-                {{ form_start.record_to_dlt(class="form-control") }} {{ form_start.record_to_dlt.label(class="col-sm-2 col-form-label") }}
+                <div class="col-sm-10">
+                    {{ form_start.do_teardown }} {{ form_start.do_teardown.label(class="col-sm-3 col-form-label") }}<br/>
+                </div>
             </div>
             <br />
 
             <div class="row mb-3">
-                {{ form_start.dlt_domain_id.label(class="col-sm-2 col-form-label") }}
+                <div class="col-sm-2 col-form-label">DLT Settings:</div>
                 <div class="col-sm-10">
+                    {{ form_start.record_to_dlt }} {{ form_start.record_to_dlt.label(class="col-sm-3 col-form-label") }} <br/>
+                    {{ form_start.dlt_domain_id.label(class="col-sm-2 col-form-label") }}
                     {% if form_start.dlt_domain_id.errors %}
                         {{ form_start.dlt_domain_id(class="form-control is-invalid") }}
                         <div class="invalid-feedback">
@@ -137,21 +140,23 @@
             <br />
 
             <div class="row mb-3">
-                {{ form_start.infinite_loop(class="form-control") }} {{ form_start.infinite_loop.label(class="col-sm-2 col-form-label") }}
-            </div>
-            <br />
-
-            <div class="row mb-3">
-                {{ form_start.running(class="form-control") }} {{ form_start.running.label(class="col-sm-2 col-form-label") }}
+                <div class="col-sm-2 col-form-label">Status:</div>
+                <div class="col-sm-10">
+                    {{ form_start.infinite_loop }} {{ form_start.infinite_loop.label(class="col-sm-3 col-form-label") }}
+                    {{ form_start.running }} {{ form_start.running.label(class="col-sm-3 col-form-label") }}
+                </div>
             </div>
             <br />
 
+            {% if not is_running %}
             <div class="d-grid gap-2 d-md-flex justify-content-md-start">
                 {{ form_start.submit(class="btn btn-primary") }}
             </div>
+            {% endif %}
         </fieldset>
     </form>
 
+    {% if is_running %}
     <form id="load_gen_stop" method="POST">
         {{ form_stop.hidden_tag() }}
         <fieldset>
@@ -160,5 +165,6 @@
             </div>
         </fieldset>
     </form>
+    {% endif %}
 
 {% endblock %}
-- 
GitLab


From bfacc00a3e1264c21b7042fd009c422a91b31ea1 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 17:08:02 +0000
Subject: [PATCH 073/229] Scripts:

- added missign script show logs load generator
---
 scripts/show_logs_load_generator.sh | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100755 scripts/show_logs_load_generator.sh

diff --git a/scripts/show_logs_load_generator.sh b/scripts/show_logs_load_generator.sh
new file mode 100755
index 000000000..d0f2527d7
--- /dev/null
+++ b/scripts/show_logs_load_generator.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Define your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/load-generatorservice
-- 
GitLab


From cb1a1c394cce50b541b25c437a68ca7ae7bbefc4 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 17:08:59 +0000
Subject: [PATCH 074/229] Slice component:

- added command to update slice groups when grouping
---
 src/slice/service/slice_grouper/Tools.py | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/slice/service/slice_grouper/Tools.py b/src/slice/service/slice_grouper/Tools.py
index 1ff82bece..12337cf8e 100644
--- a/src/slice/service/slice_grouper/Tools.py
+++ b/src/slice/service/slice_grouper/Tools.py
@@ -121,6 +121,8 @@ def add_slice_to_group(slice_obj : Slice, selected_group : Tuple[str, float, flo
         slice_group_obj.slice_subslice_ids.add().CopyFrom(slice_obj.slice_id)
         # TODO: add other logic, such as re-configure parent slice
 
+    context_client.SetSlice(slice_group_obj)
+
     metrics_exporter = MetricsExporter()
     metrics_exporter.export_point(
         slice_uuid, group_name, availability, capacity_gbps, is_center=False)
@@ -140,6 +142,12 @@ def remove_slice_from_group(slice_obj : Slice, selected_group : Tuple[str, float
         slice_group_obj.slice_subslice_ids.remove(slice_obj.slice_id)
         # TODO: other logic, such as deconfigure parent slice
 
+        tmp_slice_group_obj = Slice()
+        tmp_slice_group_obj.slice_id.CopyFrom(slice_group_obj.slice_id) # pylint: disable=no-member
+        slice_subslice_id = tmp_slice_group_obj.slice_subslice_ids.add() # pylint: disable=no-member
+        slice_subslice_id.CopyFrom(slice_obj.slice_id)
+        context_client.UnsetSlice(tmp_slice_group_obj)
+
     metrics_exporter = MetricsExporter()
     metrics_exporter.delete_point(slice_uuid)
     return True
-- 
GitLab


From 36491867d7adc8aad907a6b12501168b8422c804 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 17 Feb 2023 17:26:11 +0000
Subject: [PATCH 075/229] Common - Tools - Descriptor:

- corrected parsing of slice descriptors
---
 src/common/tools/descriptor/Tools.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/common/tools/descriptor/Tools.py b/src/common/tools/descriptor/Tools.py
index 9d6275748..f03c635b8 100644
--- a/src/common/tools/descriptor/Tools.py
+++ b/src/common/tools/descriptor/Tools.py
@@ -72,7 +72,7 @@ def format_service_custom_config_rules(service : Dict) -> Dict:
     return service
 
 def format_slice_custom_config_rules(slice_ : Dict) -> Dict:
-    config_rules = slice_.get('service_config', {}).get('config_rules', [])
+    config_rules = slice_.get('slice_config', {}).get('config_rules', [])
     config_rules = format_custom_config_rules(config_rules)
     slice_['slice_config']['config_rules'] = config_rules
     return slice_
-- 
GitLab


From 86fc7c5c95b55247db4294f11ec17b0e73e0e86c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:29:19 +0000
Subject: [PATCH 076/229] PathComp component - Frontend:

- Updated to use specific SLA Constraints together with Custom constraints
- Updated related unitary tests
---
 .../algorithms/KDisjointPathAlgorithm.py      | 17 +++++++++--
 .../algorithms/tools/ComposeRequest.py        | 29 ++++++++++++-------
 src/pathcomp/frontend/tests/Objects_A_B_C.py  |  6 ++--
 .../frontend/tests/Objects_DC_CSGW_TN.py      |  6 ++--
 .../frontend/tests/Objects_DC_CSGW_TN_OLS.py  |  6 ++--
 src/pathcomp/frontend/tests/test_unitary.py   | 12 ++++----
 .../misc/example-results-kdisjointpaths.json  |  4 +--
 7 files changed, 49 insertions(+), 31 deletions(-)

diff --git a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
index a9fc4fa3d..a6d39ee36 100644
--- a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
+++ b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
@@ -54,13 +54,15 @@ class KDisjointPathAlgorithm(_Algorithm):
             self.services_details.setdefault(service_key, service_details)
 
             for constraint in service.service_constraints:
-                if constraint.WhichOneof('constraint') == 'custom':
+                kind = constraint.WhichOneof('constraint')
+
+                if kind == 'custom':
                     constraint_type = constraint.custom.constraint_type
                     if constraint_type not in CUSTOM_CONSTRAINTS: continue
                     constraint_value = constraint.custom.constraint_value
                     constraints[constraint_type] = constraint_value
 
-                if constraint.WhichOneof('constraint') == 'endpoint_location':
+                elif kind == 'endpoint_location':
                     endpoint_id = constraint.endpoint_location.endpoint_id
                     device_uuid = endpoint_id.device_id.device_uuid.uuid
                     device_uuid = self.device_name_mapping.get(device_uuid, device_uuid)
@@ -73,7 +75,7 @@ class KDisjointPathAlgorithm(_Algorithm):
                     site_id = constraint.endpoint_location.location.region
                     endpoints.setdefault((device_uuid, endpoint_uuid), dict())['site_id'] = site_id
 
-                if constraint.WhichOneof('constraint') == 'endpoint_priority':
+                elif kind == 'endpoint_priority':
                     endpoint_id = constraint.endpoint_priority.endpoint_id
                     device_uuid = endpoint_id.device_id.device_uuid.uuid
                     device_uuid = self.device_name_mapping.get(device_uuid, device_uuid)
@@ -82,9 +84,18 @@ class KDisjointPathAlgorithm(_Algorithm):
                     priority = constraint.endpoint_priority.priority
                     endpoints.setdefault((device_uuid, endpoint_uuid), dict())['priority'] = priority
 
+                elif kind == 'sla_capacity':
+                    capacity_gbps = constraint.sla_capacity.capacity_gbps
+                    constraints['bandwidth[gbps]'] = str(capacity_gbps)
+
+                elif kind == 'sla_latency':
+                    e2e_latency_ms = constraint.sla_latency.e2e_latency_ms
+                    constraints['latency[ms]'] = str(e2e_latency_ms)
+
             # TODO: ensure these constraints are provided in the request
             if 'bandwidth[gbps]' not in constraints: constraints['bandwidth[gbps]'] = '20.0'
             if 'latency[ms]' not in constraints: constraints['latency[ms]'] = '20.0'
+            #if 'jitter[us]' not in constraints: constraints['jitter[us]'] = '50.0'
 
     def get_link_from_endpoint(self, endpoint : Dict) -> Tuple[Dict, Link]:
         device_uuid = endpoint['device_id']
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py b/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py
index bfb4da05f..ee85f0bb0 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py
@@ -73,17 +73,22 @@ def compose_latency_characteristics(fixed_latency_characteristic : str) -> Dict:
     return {'fixed-latency-characteristic': fixed_latency_characteristic}
 
 def compose_constraint(constraint : Constraint) -> Dict:
-    if constraint.WhichOneof('constraint') != 'custom':
-        str_constraint = grpc_message_to_json_string(constraint)
-        LOGGER.warning('Ignoring unsupported Constraint({:s})'.format(str_constraint))
-        return None
-    constraint_type = constraint.custom.constraint_type
-    if constraint_type in {'diversity'}:
-        str_constraint = grpc_message_to_json_string(constraint)
-        LOGGER.warning('Ignoring unsupported Constraint({:s})'.format(str_constraint))
-        return None
-    constraint_value = constraint.custom.constraint_value
-    return {'constraint_type': constraint_type, 'constraint_value': constraint_value}
+    kind = constraint.WhichOneof('constraint')
+    if kind == 'custom':
+        constraint_type = constraint.custom.constraint_type
+        if constraint_type in {'bandwidth[gbps]', 'latency[ms]', 'jitter[us]'}:
+            constraint_value = constraint.custom.constraint_value
+            return {'constraint_type': constraint_type, 'constraint_value': constraint_value}
+    elif kind == 'sla_capacity':
+        capacity_gbps = constraint.sla_capacity.capacity_gbps
+        return {'constraint_type': 'bandwidth[gbps]', 'constraint_value': str(capacity_gbps)}
+    elif kind == 'sla_latency':
+        e2e_latency_ms = constraint.sla_latency.e2e_latency_ms
+        return {'constraint_type': 'latency[ms]', 'constraint_value': str(e2e_latency_ms)}
+
+    str_constraint = grpc_message_to_json_string(constraint)
+    LOGGER.warning('Ignoring unsupported Constraint({:s})'.format(str_constraint))
+    return None
 
 def compose_device(grpc_device : Device) -> Dict:
     device_uuid = grpc_device.device_id.device_uuid.uuid
@@ -144,6 +149,8 @@ def compose_service(grpc_service : Service) -> Dict:
         constraints.append({'constraint_type': 'bandwidth[gbps]', 'constraint_value': '20.0'})
     if 'latency[ms]' not in constraint_types:
         constraints.append({'constraint_type': 'latency[ms]', 'constraint_value': '20.0'})
+    #if 'jitter[us]' not in constraint_types:
+    #    constraints.append({'constraint_type': 'jitter[us]', 'constraint_value': '50.0'})
 
     return {
         'serviceId': service_id,
diff --git a/src/pathcomp/frontend/tests/Objects_A_B_C.py b/src/pathcomp/frontend/tests/Objects_A_B_C.py
index ca9764a34..f26d74ce4 100644
--- a/src/pathcomp/frontend/tests/Objects_A_B_C.py
+++ b/src/pathcomp/frontend/tests/Objects_A_B_C.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
-from common.tools.object_factory.Constraint import json_constraint_custom
+from common.tools.object_factory.Constraint import json_constraint_sla_capacity, json_constraint_sla_latency
 from common.tools.object_factory.Context import json_context, json_context_id
 from common.tools.object_factory.Device import json_device_emulated_packet_router_disabled, json_device_id
 from common.tools.object_factory.EndPoint import json_endpoints
@@ -97,8 +97,8 @@ LINK_C2_C3_ID, LINK_C2_C3 = compose_link(DEVICE_C2_ENDPOINTS[1], DEVICE_C3_ENDPO
 
 # ----- Service --------------------------------------------------------------------------------------------------------
 SERVICE_A1_B1 = compose_service(DEVICE_A1_ENDPOINTS[2], DEVICE_B1_ENDPOINTS[2], constraints=[
-    json_constraint_custom('bandwidth[gbps]', 10.0),
-    json_constraint_custom('latency[ms]',     12.0),
+    json_constraint_sla_capacity(10.0),
+    json_constraint_sla_latency(12.0),
 ])
 
 # ----- Containers -----------------------------------------------------------------------------------------------------
diff --git a/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py
index 1d057c10e..9ee784e1f 100644
--- a/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py
+++ b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
-from common.tools.object_factory.Constraint import json_constraint_custom
+from common.tools.object_factory.Constraint import json_constraint_sla_capacity, json_constraint_sla_latency
 from common.tools.object_factory.Context import json_context, json_context_id
 from common.tools.object_factory.Device import (
     json_device_emulated_connect_rules, json_device_emulated_datacenter_disabled,
@@ -139,8 +139,8 @@ LINK_TNR2_TNR4_ID, LINK_TNR2_TNR4 = compose_link(DEV_TNR2_EPS[4], DEV_TNR4_EPS[4
 
 # ----- Service --------------------------------------------------------------------------------------------------------
 SERVICE_DC1GW_DC2GW = compose_service(DEV_DC1GW_EPS[2], DEV_DC2GW_EPS[2], constraints=[
-    json_constraint_custom('bandwidth[gbps]', 10.0),
-    json_constraint_custom('latency[ms]',     20.0),
+    json_constraint_sla_capacity(10.0),
+    json_constraint_sla_latency(20.0),
 ])
 
 # ----- Containers -----------------------------------------------------------------------------------------------------
diff --git a/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py
index 8f6e88719..71510d088 100644
--- a/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py
+++ b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py
@@ -14,7 +14,7 @@
 
 import uuid
 from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
-from common.tools.object_factory.Constraint import json_constraint_custom
+from common.tools.object_factory.Constraint import json_constraint_sla_capacity, json_constraint_sla_latency
 from common.tools.object_factory.Context import json_context, json_context_id
 from common.tools.object_factory.Device import (
     json_device_emulated_connect_rules, json_device_emulated_datacenter_disabled,
@@ -149,8 +149,8 @@ LINK_TNR4_TOLS_ID, LINK_TNR4_TOLS = compose_link(DEV_TNR4_EPS[2], DEV_TOLS_EPS[3
 
 # ----- Service --------------------------------------------------------------------------------------------------------
 SERVICE_DC1GW_DC2GW = compose_service(DEV_DC1GW_EPS[2], DEV_DC2GW_EPS[2], constraints=[
-    json_constraint_custom('bandwidth[gbps]', 10.0),
-    json_constraint_custom('latency[ms]',     20.0),
+    json_constraint_sla_capacity(10.0),
+    json_constraint_sla_latency(20.0),
 ])
 
 # ----- Containers -----------------------------------------------------------------------------------------------------
diff --git a/src/pathcomp/frontend/tests/test_unitary.py b/src/pathcomp/frontend/tests/test_unitary.py
index d06386231..8088259b8 100644
--- a/src/pathcomp/frontend/tests/test_unitary.py
+++ b/src/pathcomp/frontend/tests/test_unitary.py
@@ -18,7 +18,7 @@ from common.proto.pathcomp_pb2 import PathCompRequest
 from common.tools.grpc.Tools import grpc_message_to_json
 from common.tools.object_factory.Constraint import (
     json_constraint_custom, json_constraint_endpoint_location_region, json_constraint_endpoint_priority,
-    json_constraint_sla_availability)
+    json_constraint_sla_availability, json_constraint_sla_capacity, json_constraint_sla_latency)
 from common.tools.object_factory.Device import json_device_id
 from common.tools.object_factory.EndPoint import json_endpoint_id
 from common.tools.object_factory.Service import json_service_l3nm_planned
@@ -89,8 +89,8 @@ def test_request_service_shortestpath(
 
     request_services = copy.deepcopy(SERVICES)
     #request_services[0]['service_constraints'] = [
-    #    json_constraint_custom('bandwidth[gbps]', 1000.0),
-    #    json_constraint_custom('latency[ms]',     1200.0),
+    #    json_constraint_sla_capacity(1000.0),
+    #    json_constraint_sla_latency(1200.0),
     #]
     pathcomp_request = PathCompRequest(services=request_services)
     pathcomp_request.shortest_path.Clear()  # hack to select the shortest path algorithm that has no attributes
@@ -201,9 +201,9 @@ def test_request_service_kdisjointpath(
     ]
     
     endpoint_ids, constraints = [], [
-        json_constraint_custom('bandwidth[gbps]', 10.0),
-        json_constraint_custom('latency[ms]',     12.0),
-        json_constraint_sla_availability(2, True),
+        json_constraint_sla_capacity(10.0),
+        json_constraint_sla_latency(12.0),
+        json_constraint_sla_availability(2, True, 50.0),
         json_constraint_custom('diversity', {'end-to-end-diverse': 'all-other-accesses'}),
     ]
 
diff --git a/src/pathcomp/misc/example-results-kdisjointpaths.json b/src/pathcomp/misc/example-results-kdisjointpaths.json
index 9eda25d48..c1dbf3a3c 100644
--- a/src/pathcomp/misc/example-results-kdisjointpaths.json
+++ b/src/pathcomp/misc/example-results-kdisjointpaths.json
@@ -64,8 +64,8 @@
             ],
             "service_status": {"service_status": "SERVICESTATUS_PLANNED"},
             "service_constraints": [
-                {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": "10.0"}},
-                {"custom": {"constraint_type": "latency[ms]", "constraint_value": "12.0"}}
+                {"sla_capacity": {"capacity_gbps": 10.0}},
+                {"sla_latency": {"e2e_latency_ms": 12.0}}
             ],
             "service_config": {"config_rules": []}
         }
-- 
GitLab


From 35d2fcfe440865762879f3a6c07da79b8ebcdf96 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:31:13 +0000
Subject: [PATCH 077/229] Service component:

- Corrected inference of pathcomp algorithm and parameters
- Removed unneeded log messages/reduced log levels
---
 .../service/ServiceServiceServicerImpl.py     | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/service/service/ServiceServiceServicerImpl.py b/src/service/service/ServiceServiceServicerImpl.py
index 622abeee8..0b2e07601 100644
--- a/src/service/service/ServiceServiceServicerImpl.py
+++ b/src/service/service/ServiceServiceServicerImpl.py
@@ -38,8 +38,6 @@ class ServiceServiceServicerImpl(ServiceServiceServicer):
 
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
     def CreateService(self, request : Service, context : grpc.ServicerContext) -> ServiceId:
-        LOGGER.info('[CreateService] begin ; request = {:s}'.format(grpc_message_to_json_string(request)))
-
         if len(request.service_endpoint_ids) > 0:
             unexpected_endpoints = []
             for service_endpoint_id in request.service_endpoint_ids:
@@ -85,8 +83,6 @@ class ServiceServiceServicerImpl(ServiceServiceServicer):
 
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
     def UpdateService(self, request : Service, context : grpc.ServicerContext) -> ServiceId:
-        LOGGER.info('[UpdateService] begin ; request = {:s}'.format(grpc_message_to_json_string(request)))
-
         # Set service status to "SERVICESTATUS_PLANNED" to ensure rest of components are aware the service is
         # being modified.
         context_client = ContextClient()
@@ -112,27 +108,30 @@ class ServiceServiceServicerImpl(ServiceServiceServicer):
         service_id_with_uuids = context_client.SetService(service)
         service_with_uuids = context_client.GetService(service_id_with_uuids)
 
-        num_disjoint_paths = None
+        num_disjoint_paths = 0
         for constraint in request.service_constraints:
             if constraint.WhichOneof('constraint') == 'sla_availability':
                 num_disjoint_paths = constraint.sla_availability.num_disjoint_paths
                 break
 
+        num_disjoint_paths = 1 if num_disjoint_paths is None or num_disjoint_paths == 0 else num_disjoint_paths
+        num_expected_endpoints = num_disjoint_paths * 2
+
         tasks_scheduler = TasksScheduler(self.service_handler_factory)
-        if len(service_with_uuids.service_endpoint_ids) >= (2 if num_disjoint_paths is None else 4):
+        if len(service_with_uuids.service_endpoint_ids) >= num_expected_endpoints:
             pathcomp_request = PathCompRequest()
             pathcomp_request.services.append(service_with_uuids)    # pylint: disable=no-member
 
-            if num_disjoint_paths is None:
+            if num_disjoint_paths is None or num_disjoint_paths in {0, 1}:
                 pathcomp_request.shortest_path.Clear()              # pylint: disable=no-member
             else:
                 pathcomp_request.k_disjoint_path.num_disjoint = num_disjoint_paths  # pylint: disable=no-member
 
-            LOGGER.info('pathcomp_request={:s}'.format(grpc_message_to_json_string(pathcomp_request)))
+            LOGGER.debug('pathcomp_request={:s}'.format(grpc_message_to_json_string(pathcomp_request)))
             pathcomp = PathCompClient()
             pathcomp_reply = pathcomp.Compute(pathcomp_request)
             pathcomp.close()
-            LOGGER.info('pathcomp_reply={:s}'.format(grpc_message_to_json_string(pathcomp_reply)))
+            LOGGER.debug('pathcomp_reply={:s}'.format(grpc_message_to_json_string(pathcomp_reply)))
 
             # Feed TaskScheduler with this path computation reply. TaskScheduler identifies inter-dependencies among
             # the services and connections retrieved and produces a schedule of tasks (an ordered list of tasks to be
@@ -144,8 +143,6 @@ class ServiceServiceServicerImpl(ServiceServiceServicer):
 
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
     def DeleteService(self, request : ServiceId, context : grpc.ServicerContext) -> Empty:
-        LOGGER.info('[DeleteService] begin ; request = {:s}'.format(grpc_message_to_json_string(request)))
-
         context_client = ContextClient()
 
         # Set service status to "SERVICESTATUS_PENDING_REMOVAL" to ensure rest of components are aware the service is
-- 
GitLab


From a6c1340afecf29d82bf4c4620f8904ac68c21105 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:32:12 +0000
Subject: [PATCH 078/229] Common - Context Queries - InterDomain:

- Corrected Constraint definitions
---
 src/common/tools/context_queries/InterDomain.py | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/common/tools/context_queries/InterDomain.py b/src/common/tools/context_queries/InterDomain.py
index 7317cc793..edb640708 100644
--- a/src/common/tools/context_queries/InterDomain.py
+++ b/src/common/tools/context_queries/InterDomain.py
@@ -136,13 +136,11 @@ def compute_interdomain_path(
         service_endpoint_id = pathcomp_req_svc.service_endpoint_ids.add()
         service_endpoint_id.CopyFrom(endpoint_id)
     
-    constraint_bw = pathcomp_req_svc.service_constraints.add()
-    constraint_bw.custom.constraint_type = 'bandwidth[gbps]'
-    constraint_bw.custom.constraint_value = '10.0'
+    constraint_sla_capacity = pathcomp_req_svc.service_constraints.add()
+    constraint_sla_capacity.sla_capacity.capacity_gbps = 10.0
 
-    constraint_lat = pathcomp_req_svc.service_constraints.add()
-    constraint_lat.custom.constraint_type = 'latency[ms]'
-    constraint_lat.custom.constraint_value = '100.0'
+    constraint_sla_latency = pathcomp_req_svc.service_constraints.add()
+    constraint_sla_latency.sla_latency.e2e_latency_ms = 100.0
 
     LOGGER.debug('pathcomp_req = {:s}'.format(grpc_message_to_json_string(pathcomp_req)))
     pathcomp_rep = pathcomp_client.Compute(pathcomp_req)
-- 
GitLab


From da51b8957c48058e36d0d0aeaebe5e335117b0fe Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:32:56 +0000
Subject: [PATCH 079/229] Context component:

- Corrected Constraint definitions in unitary tests
---
 src/context/tests/Objects.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/context/tests/Objects.py b/src/context/tests/Objects.py
index 8634c1f30..6b52ef4c0 100644
--- a/src/context/tests/Objects.py
+++ b/src/context/tests/Objects.py
@@ -17,7 +17,7 @@ from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
 from common.tools.object_factory.ConfigRule import json_config_rule_set
 from common.tools.object_factory.Connection import json_connection, json_connection_id
-from common.tools.object_factory.Constraint import json_constraint_custom
+from common.tools.object_factory.Constraint import json_constraint_custom, json_constraint_sla_latency
 from common.tools.object_factory.Context import json_context, json_context_id
 from common.tools.object_factory.Device import json_device_id, json_device_packetrouter_disabled
 from common.tools.object_factory.EndPoint import json_endpoint, json_endpoint_id
@@ -95,7 +95,7 @@ def compose_service(
         for device_id, endpoint_name in endpoint_ids
     ]
     constraints = [
-        json_constraint_custom('latency[ms]', str(latency_ms)),
+        json_constraint_sla_latency(latency_ms),
         json_constraint_custom('jitter[us]',  str(jitter_us)),
     ]
     config_rules = [
@@ -128,7 +128,7 @@ def compose_slice(
         for device_id, endpoint_name in endpoint_ids
     ]
     constraints = [
-        json_constraint_custom('latency[ms]', str(latency_ms)),
+        json_constraint_sla_latency(latency_ms),
         json_constraint_custom('jitter[us]',  str(jitter_us)),
     ]
     config_rules = [
-- 
GitLab


From 3dfc06c45e3530a6e91f08f21a6ef1ca1970f2f0 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:34:02 +0000
Subject: [PATCH 080/229] Test tools - Mock_OSM:

- Corrected Constraint definitions in example descriptors
---
 src/tests/tools/mock_sdn_ctrl/service_descriptor.json | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/tests/tools/mock_sdn_ctrl/service_descriptor.json b/src/tests/tools/mock_sdn_ctrl/service_descriptor.json
index a4109bc7b..2d4ed3eaf 100644
--- a/src/tests/tools/mock_sdn_ctrl/service_descriptor.json
+++ b/src/tests/tools/mock_sdn_ctrl/service_descriptor.json
@@ -12,8 +12,8 @@
                 {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "EXT"}}
             ],
             "service_constraints": [
-                {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": "10.0"}},
-                {"custom": {"constraint_type": "latency[ms]", "constraint_value": "15.2"}}
+                {"sla_capacity": {"capacity_gbps": 10.0}},
+                {"sla_latency": {"e2e_latency_ms": 15.2}}
             ],
             "service_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "/settings", "resource_value": {
-- 
GitLab


From 16ffcc1996aac863b27f327ae0e5abba2d17295d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:34:50 +0000
Subject: [PATCH 081/229] Hackfest service descriptors:

- Corrected Constraint definitions
---
 hackfest/tfs-descriptors/old/service.json   | 4 ++--
 hackfest/tfs-descriptors/service-l3vpn.json | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/hackfest/tfs-descriptors/old/service.json b/hackfest/tfs-descriptors/old/service.json
index a25d0171d..26804dcf1 100644
--- a/hackfest/tfs-descriptors/old/service.json
+++ b/hackfest/tfs-descriptors/old/service.json
@@ -18,8 +18,8 @@
                 {"device_id":{"device_uuid":{"uuid":"R2"}},"endpoint_uuid":{"uuid":"1/3"}}
             ],
             "service_constraints":[
-                {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": "10.0"}},
-                {"custom": {"constraint_type": "latency[ms]", "constraint_value": "20.0"}}
+                {"sla_capacity": {"capacity_gbps": 10.0}},
+                {"sla_latency": {"e2e_latency_ms": 20.0}}
             ],
             "service_config":{"config_rules":[]}
         }
diff --git a/hackfest/tfs-descriptors/service-l3vpn.json b/hackfest/tfs-descriptors/service-l3vpn.json
index 457ba1a50..723453b8b 100644
--- a/hackfest/tfs-descriptors/service-l3vpn.json
+++ b/hackfest/tfs-descriptors/service-l3vpn.json
@@ -12,8 +12,8 @@
                 {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "1/2"}}
             ],
             "service_constraints": [
-                {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": "10.0"}},
-                {"custom": {"constraint_type": "latency[ms]", "constraint_value": "15.2"}}
+                {"sla_capacity": {"capacity_gbps": 10.0}},
+                {"sla_latency": {"e2e_latency_ms": 15.2}}
             ],
             "service_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "/settings", "resource_value": {
-- 
GitLab


From bc2b0e9ef1740e575b083eaf301cd4ad36a652f9 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:39:35 +0000
Subject: [PATCH 082/229] Context component:

- Corrected slice-to-subslice db schema
- Corrected removal of endpoints
---
 src/context/service/database/Slice.py             | 2 +-
 src/context/service/database/models/SliceModel.py | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/context/service/database/Slice.py b/src/context/service/database/Slice.py
index b841b9cc8..80af759de 100644
--- a/src/context/service/database/Slice.py
+++ b/src/context/service/database/Slice.py
@@ -180,7 +180,7 @@ def slice_unset(db_engine : Engine, request : Slice) -> Tuple[Dict, bool]:
 
     if len(request.slice_constraints) > 0:         raise NotImplementedError('UnsetSlice: removal of constraints')
     if len(request.slice_config.config_rules) > 0: raise NotImplementedError('UnsetSlice: removal of config rules')
-    if len(request.slice_endpoint_ids) > 0:        raise NotImplementedError('UnsetSlice: removal of endpoints')
+    #if len(request.slice_endpoint_ids) > 0:        raise NotImplementedError('UnsetSlice: removal of endpoints')
 
     slice_endpoint_uuids : Set[str] = set()
     for i,endpoint_id in enumerate(request.slice_endpoint_ids):
diff --git a/src/context/service/database/models/SliceModel.py b/src/context/service/database/models/SliceModel.py
index 6943861c8..458bc714a 100644
--- a/src/context/service/database/models/SliceModel.py
+++ b/src/context/service/database/models/SliceModel.py
@@ -98,8 +98,8 @@ class SliceServiceModel(_Base):
 class SliceSubSliceModel(_Base):
     __tablename__ = 'slice_subslice'
 
-    slice_uuid    = Column(ForeignKey('slice.slice_uuid', ondelete='CASCADE' ), primary_key=True)
-    subslice_uuid = Column(ForeignKey('slice.slice_uuid', ondelete='RESTRICT'), primary_key=True)
+    slice_uuid    = Column(ForeignKey('slice.slice_uuid', ondelete='CASCADE'), primary_key=True)
+    subslice_uuid = Column(ForeignKey('slice.slice_uuid', ondelete='CASCADE'), primary_key=True)
 
     slice    = relationship(
         'SliceModel', foreign_keys='SliceSubSliceModel.slice_uuid', back_populates='slice_subslices', lazy='joined')
-- 
GitLab


From 42f566fcd84079d670255aacb26293571f2c4b60 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:41:31 +0000
Subject: [PATCH 083/229] WebUI component:

- Minor cosmetic changes in code
- Addition of missing close methods
---
 src/webui/service/main/routes.py | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/webui/service/main/routes.py b/src/webui/service/main/routes.py
index dcbbf71a6..32cefddf3 100644
--- a/src/webui/service/main/routes.py
+++ b/src/webui/service/main/routes.py
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import base64, json, logging, re
+import base64, json, logging #, re
 from flask import jsonify, redirect, render_template, Blueprint, flash, session, url_for, request
 from common.proto.context_pb2 import ContextList, Empty, TopologyId, TopologyList
 from common.tools.descriptor.Loader import DescriptorLoader, compose_notifications
@@ -55,7 +55,7 @@ def process_descriptors(descriptors):
 def home():
     context_client.connect()
     device_client.connect()
-    context_topology_form: ContextTopologyForm = ContextTopologyForm()
+    context_topology_form = ContextTopologyForm()
     context_topology_form.context_topology.choices.append(('', 'Select...'))
 
     contexts : ContextList = context_client.ListContexts(Empty())
@@ -87,6 +87,10 @@ def home():
             #session['topology_name'] = topology_name
             MSG = f'Context({context_name})/Topology({topology_name}) successfully selected.'
             flash(MSG, 'success')
+
+            context_client.close()
+            device_client.close()
+
             return redirect(url_for('main.home'))
 
             #match = re.match('ctx\[([^\]]+)\]\/topo\[([^\]]+)\]', context_topology_uuid)
@@ -101,7 +105,7 @@ def home():
     if 'context_topology_uuid' in session:
         context_topology_form.context_topology.data = session['context_topology_uuid']
 
-    descriptor_form: DescriptorForm = DescriptorForm()
+    descriptor_form = DescriptorForm()
     try:
         if descriptor_form.validate_on_submit():
             process_descriptors(descriptor_form.descriptors)
-- 
GitLab


From 41f314a85f07429fa6eaecd46aaaa6637c563c4d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:44:50 +0000
Subject: [PATCH 084/229] Load-Generator component:

- Corrected Constraint definitions
- Corrected termination conditions
- Added randomness in constraint values
---
 .../load_gen/RequestGenerator.py              | 66 +++++++++++++------
 .../load_gen/RequestScheduler.py              | 30 ++++++---
 2 files changed, 68 insertions(+), 28 deletions(-)

diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index 906c26e98..a6d14307e 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -14,9 +14,11 @@
 
 import logging, json, random, threading
 from typing import Dict, Optional, Set, Tuple
-from common.proto.context_pb2 import Empty, TopologyId
+from common.proto.context_pb2 import Empty, IsolationLevelEnum, TopologyId
 from common.tools.grpc.Tools import grpc_message_to_json
-from common.tools.object_factory.Constraint import json_constraint_custom
+from common.tools.object_factory.Constraint import (
+    json_constraint_sla_availability, json_constraint_sla_capacity, json_constraint_sla_isolation,
+    json_constraint_sla_latency)
 from common.tools.object_factory.ConfigRule import json_config_rule_set
 from common.tools.object_factory.Device import json_device_id
 from common.tools.object_factory.EndPoint import json_endpoint_id
@@ -36,7 +38,7 @@ class RequestGenerator:
     def __init__(self, parameters : Parameters) -> None:
         self._parameters = parameters
         self._lock = threading.Lock()
-        self._num_requests = 0
+        self._num_generated = 0
         self._available_device_endpoints : Dict[str, Set[str]] = dict()
         self._used_device_endpoints : Dict[str, Dict[str, str]] = dict()
         self._endpoint_ids_to_types : Dict[Tuple[str, str], str] = dict()
@@ -45,6 +47,12 @@ class RequestGenerator:
         self._device_data : Dict[str, Dict] = dict()
         self._device_endpoint_data : Dict[str, Dict[str, Dict]] = dict()
 
+    @property
+    def num_generated(self): return self._num_generated
+
+    @property
+    def infinite_loop(self): return self._parameters.num_requests == 0
+
     def initialize(self) -> None:
         with self._lock:
             self._available_device_endpoints.clear()
@@ -96,17 +104,14 @@ class RequestGenerator:
                     if self._parameters.record_to_dlt:
                         record_link_to_dlt(dlt_connector_client, dlt_domain_id, link.link_id)
 
-    @property
-    def num_requests_generated(self): return self._num_requests
-
     def dump_state(self) -> None:
         with self._lock:
             _endpoints = {
                 device_uuid:[endpoint_uuid for endpoint_uuid in endpoint_uuids]
                 for device_uuid,endpoint_uuids in self._available_device_endpoints.items()
             }
-            LOGGER.info('[dump_state] available_device_endpoints = {:s}'.format(json.dumps(_endpoints)))
-            LOGGER.info('[dump_state] used_device_endpoints = {:s}'.format(json.dumps(self._used_device_endpoints)))
+            LOGGER.debug('[dump_state] available_device_endpoints = {:s}'.format(json.dumps(_endpoints)))
+            LOGGER.debug('[dump_state] used_device_endpoints = {:s}'.format(json.dumps(self._used_device_endpoints)))
 
     def _use_device_endpoint(
         self, service_uuid : str, request_type : RequestType, endpoint_types : Optional[Set[str]] = None,
@@ -167,10 +172,13 @@ class RequestGenerator:
             self._used_device_endpoints.setdefault(device_uuid, dict()).pop(endpoint_uuid, None)
             self._available_device_endpoints.setdefault(device_uuid, set()).add(endpoint_uuid)
 
-    def compose_request(self) -> Optional[Dict]:
+    def compose_request(self) -> Tuple[bool, Optional[Dict]]: # completed, request
         with self._lock:
-            self._num_requests += 1
-            num_request = self._num_requests
+            if not self.infinite_loop and (self._num_generated >= self._parameters.num_requests):
+                LOGGER.info('Generation Done!')
+                return True, None # completed
+            self._num_generated += 1
+            num_request = self._num_generated
 
         #request_uuid = str(uuid.uuid4())
         request_uuid = 'svc_{:d}'.format(num_request)
@@ -181,9 +189,9 @@ class RequestGenerator:
         if request_type in {
             RequestType.SERVICE_L2NM, RequestType.SERVICE_L3NM, RequestType.SERVICE_TAPI, RequestType.SERVICE_MW
         }:
-            return self._compose_service(num_request, request_uuid, request_type)
+            return False, self._compose_service(num_request, request_uuid, request_type)
         elif request_type in {RequestType.SLICE_L2NM, RequestType.SLICE_L3NM}:
-            return self._compose_slice(num_request, request_uuid, request_type)
+            return False, self._compose_slice(num_request, request_uuid, request_type)
 
     def _compose_service(self, num_request : int, request_uuid : str, request_type : str) -> Optional[Dict]:
         # choose source endpoint
@@ -222,10 +230,17 @@ class RequestGenerator:
         ]
 
         if request_type == RequestType.SERVICE_L2NM:
+            availability  = int(random.uniform(00.0, 99.99) * 100.0) / 100.0
+            capacity_gbps = int(random.uniform(0.1, 100.0) * 100.0) / 100.0
+            e2e_latency_ms = int(random.uniform(5.0, 100.0) * 100.0) / 100.0
+
             constraints = [
-                json_constraint_custom('bandwidth[gbps]', '10.0'),
-                json_constraint_custom('latency[ms]',     '20.0'),
+                json_constraint_sla_availability(1, True, availability),
+                json_constraint_sla_capacity(capacity_gbps),
+                json_constraint_sla_isolation([IsolationLevelEnum.NO_ISOLATION]),
+                json_constraint_sla_latency(e2e_latency_ms),
             ]
+
             vlan_id = num_request % 1000
             circuit_id = '{:03d}'.format(vlan_id)
 
@@ -260,10 +275,17 @@ class RequestGenerator:
                 request_uuid, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules)
 
         elif request_type == RequestType.SERVICE_L3NM:
+            availability  = int(random.uniform(00.0, 99.99) * 100.0) / 100.0
+            capacity_gbps = int(random.uniform(0.1, 100.0) * 100.0) / 100.0
+            e2e_latency_ms = int(random.uniform(5.0, 100.0) * 100.0) / 100.0
+
             constraints = [
-                json_constraint_custom('bandwidth[gbps]', '10.0'),
-                json_constraint_custom('latency[ms]',     '20.0'),
+                json_constraint_sla_availability(1, True, availability),
+                json_constraint_sla_capacity(capacity_gbps),
+                json_constraint_sla_isolation([IsolationLevelEnum.NO_ISOLATION]),
+                json_constraint_sla_latency(e2e_latency_ms),
             ]
+
             vlan_id = num_request % 1000
             bgp_as = 60000 + (num_request % 10000)
             bgp_route_target = '{:5d}:{:03d}'.format(bgp_as, 333)
@@ -357,9 +379,15 @@ class RequestGenerator:
             json_endpoint_id(json_device_id(src_device_uuid), src_endpoint_uuid),
             json_endpoint_id(json_device_id(dst_device_uuid), dst_endpoint_uuid),
         ]
+
+        availability  = int(random.uniform(00.0, 99.99) * 100.0) / 100.0
+        capacity_gbps = int(random.uniform(0.1, 100.0) * 100.0) / 100.0
+        e2e_latency_ms = int(random.uniform(5.0, 100.0) * 100.0) / 100.0
         constraints = [
-            json_constraint_custom('bandwidth[gbps]', '10.0'),
-            json_constraint_custom('latency[ms]',     '20.0'),
+            json_constraint_sla_availability(1, True, availability),
+            json_constraint_sla_capacity(capacity_gbps),
+            json_constraint_sla_isolation([IsolationLevelEnum.NO_ISOLATION]),
+            json_constraint_sla_latency(e2e_latency_ms),
         ]
 
         if request_type == RequestType.SLICE_L2NM:
diff --git a/src/load_generator/load_gen/RequestScheduler.py b/src/load_generator/load_gen/RequestScheduler.py
index 775da1580..13ae70deb 100644
--- a/src/load_generator/load_gen/RequestScheduler.py
+++ b/src/load_generator/load_gen/RequestScheduler.py
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import copy, logging, pytz, random
+import copy, logging, pytz, random, threading
 from apscheduler.executors.pool import ThreadPoolExecutor
 from apscheduler.jobstores.memory import MemoryJobStore
 from apscheduler.schedulers.blocking import BlockingScheduler
@@ -46,14 +46,18 @@ class RequestScheduler:
             timezone=pytz.utc)
         self._parameters = parameters
         self._generator = generator
+        self._running = threading.Event()
+
+    @property
+    def num_generated(self): return max(self._generator.num_generated, self._parameters.num_requests)
+
+    @property
+    def infinite_loop(self): return self._generator.infinite_loop
+
+    @property
+    def running(self): return self._running.is_set()
 
     def _schedule_request_setup(self) -> None:
-        infinite_loop = self._parameters.num_requests == 0
-        num_requests_generated = self._generator.num_requests_generated - 1 # because it first increases, then checks
-        if not infinite_loop and (num_requests_generated >= self._parameters.num_requests):
-            LOGGER.info('Generation Done!')
-            #self._scheduler.shutdown()
-            return
         iat = random.expovariate(1.0 / self._parameters.inter_arrival_time)
         run_date = datetime.utcnow() + timedelta(seconds=iat)
         self._scheduler.add_job(
@@ -66,16 +70,24 @@ class RequestScheduler:
             self._request_teardown, args=(request,), trigger='date', run_date=run_date, timezone=pytz.utc)
 
     def start(self):
+        self._running.set()
         self._schedule_request_setup()
         self._scheduler.start()
 
     def stop(self):
         self._scheduler.shutdown()
+        self._running.clear()
 
     def _request_setup(self) -> None:
-        self._schedule_request_setup()
+        completed,request = self._generator.compose_request()
+        if completed:
+            LOGGER.info('Generation Done!')
+            #self._scheduler.shutdown()
+            self._running.clear()
+            return
+        else:
+            self._schedule_request_setup()
 
-        request = self._generator.compose_request()
         if request is None:
             LOGGER.warning('No resources available to compose new request')
             return
-- 
GitLab


From 9dd7b10be8ed4bb38079eb520e5f0da2cd92cfb9 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:46:48 +0000
Subject: [PATCH 085/229] Slice component:

- Removed unneeded log messages/reduced log levels
---
 src/slice/service/SliceServiceServicerImpl.py | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/slice/service/SliceServiceServicerImpl.py b/src/slice/service/SliceServiceServicerImpl.py
index 21d820089..d49f1c547 100644
--- a/src/slice/service/SliceServiceServicerImpl.py
+++ b/src/slice/service/SliceServiceServicerImpl.py
@@ -24,7 +24,7 @@ from common.tools.grpc.ConfigRules import copy_config_rules
 from common.tools.grpc.Constraints import copy_constraints
 from common.tools.grpc.EndPointIds import copy_endpoint_ids
 from common.tools.grpc.ServiceIds import update_service_ids
-from common.tools.grpc.Tools import grpc_message_to_json_string
+#from common.tools.grpc.Tools import grpc_message_to_json_string
 from context.client.ContextClient import ContextClient
 from interdomain.client.InterdomainClient import InterdomainClient
 from service.client.ServiceClient import ServiceClient
@@ -109,13 +109,13 @@ class SliceServiceServicerImpl(SliceServiceServicer):
 
         service_request.service_type = ServiceTypeEnum.SERVICETYPE_UNKNOWN
         for config_rule in request.slice_config.config_rules:
-            LOGGER.info('config_rule: {:s}'.format(grpc_message_to_json_string(config_rule)))
+            #LOGGER.debug('config_rule: {:s}'.format(grpc_message_to_json_string(config_rule)))
             config_rule_kind = config_rule.WhichOneof('config_rule')
-            LOGGER.info('config_rule_kind: {:s}'.format(str(config_rule_kind)))
+            #LOGGER.debug('config_rule_kind: {:s}'.format(str(config_rule_kind)))
             if config_rule_kind != 'custom': continue
             custom = config_rule.custom
             resource_key = custom.resource_key
-            LOGGER.info('resource_key: {:s}'.format(str(resource_key)))
+            #LOGGER.debug('resource_key: {:s}'.format(str(resource_key)))
 
             # TODO: parse resource key with regular expression, e.g.:
             #    m = re.match('\/device\[[^\]]\]\/endpoint\[[^\]]\]\/settings', s)
@@ -123,21 +123,21 @@ class SliceServiceServicerImpl(SliceServiceServicer):
             if not resource_key.endswith('/settings'): continue
 
             resource_value = json.loads(custom.resource_value)
-            LOGGER.info('resource_value: {:s}'.format(str(resource_value)))
+            #LOGGER.debug('resource_value: {:s}'.format(str(resource_value)))
 
             if service_request.service_type == ServiceTypeEnum.SERVICETYPE_UNKNOWN:
                 if (resource_value.get('address_ip') is not None and \
                     resource_value.get('address_prefix') is not None):
                     service_request.service_type = ServiceTypeEnum.SERVICETYPE_L3NM
-                    LOGGER.info('is L3')
+                    #LOGGER.debug('is L3')
                 else:
                     service_request.service_type = ServiceTypeEnum.SERVICETYPE_L2NM
-                    LOGGER.info('is L2')
+                    #LOGGER.debug('is L2')
                 break
 
         if service_request.service_type == ServiceTypeEnum.SERVICETYPE_UNKNOWN:
             service_request.service_type = ServiceTypeEnum.SERVICETYPE_L2NM
-            LOGGER.info('assume L2')
+            #LOGGER.debug('assume L2')
 
         service_client.UpdateService(service_request)
 
-- 
GitLab


From e9ed3dc7481e4712f15f4994ba88dd354e36d942 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 14:53:09 +0000
Subject: [PATCH 086/229] WebUI component:

- Corrected logic, form and page to manage/monitor load-gen component
---
 src/webui/service/load_gen/forms.py           |  13 +-
 src/webui/service/load_gen/routes.py          | 149 ++++++++++--------
 .../service/templates/load_gen/home.html      | 101 +++++-------
 3 files changed, 129 insertions(+), 134 deletions(-)

diff --git a/src/webui/service/load_gen/forms.py b/src/webui/service/load_gen/forms.py
index 911d28e44..4e0020b04 100644
--- a/src/webui/service/load_gen/forms.py
+++ b/src/webui/service/load_gen/forms.py
@@ -16,7 +16,7 @@ from flask_wtf import FlaskForm
 from wtforms import BooleanField, FloatField, IntegerField, StringField, SubmitField
 from wtforms.validators import DataRequired, NumberRange
 
-class LoadGenStartForm(FlaskForm):
+class LoadGenForm(FlaskForm):
     num_requests = IntegerField('Num Requests', default=100, validators=[DataRequired(), NumberRange(min=0)])
     num_generated = IntegerField('Num Generated', default=0, render_kw={'readonly': True})
 
@@ -29,17 +29,14 @@ class LoadGenStartForm(FlaskForm):
 
     offered_load = FloatField('Offered Load [Erlang]', default=50, validators=[NumberRange(min=0.0)])
     holding_time = FloatField('Holding Time [seconds]', default=10, validators=[NumberRange(min=0.0)])
-    inter_arrival_time = FloatField('Inter Arrival Time[seconds]', default=0, validators=[NumberRange(min=0.0)])
+    inter_arrival_time = FloatField('Inter Arrival Time [seconds]', default=0, validators=[NumberRange(min=0.0)])
 
     do_teardown = BooleanField('Do Teardown', default=True)
 
     record_to_dlt = BooleanField('Record to DLT', default=False)
     dlt_domain_id = StringField('DLT Domain Id', default='')
 
-    infinite_loop = BooleanField('Infinite Loop', default=False, render_kw={'readonly': True})
-    running = BooleanField('Running', default=False, render_kw={'readonly': True})
+    infinite_loop = BooleanField('Infinite Loop', default=False, render_kw={'disabled': True})
+    running = BooleanField('Running', default=False, render_kw={'disabled': True})
 
-    submit = SubmitField('Start')
-
-class LoadGenStopForm(FlaskForm):
-    submit = SubmitField('Stop')
+    submit = SubmitField('Start/Stop')
diff --git a/src/webui/service/load_gen/routes.py b/src/webui/service/load_gen/routes.py
index ab1733013..5f47f06b0 100644
--- a/src/webui/service/load_gen/routes.py
+++ b/src/webui/service/load_gen/routes.py
@@ -12,102 +12,115 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from flask import render_template, Blueprint, flash
+from typing import Any, Optional
+from flask import redirect, render_template, Blueprint, flash, url_for
 from common.proto.context_pb2 import Empty
 from common.proto.load_generator_pb2 import Parameters, RequestTypeEnum
 from load_generator.client.LoadGeneratorClient import LoadGeneratorClient
-from .forms import LoadGenStartForm, LoadGenStopForm
+from .forms import LoadGenForm
 
 load_gen = Blueprint('load_gen', __name__, url_prefix='/load_gen')
 
-def make_read_only(field, readonly : bool) -> None:
+def set_properties(field, data : Any, readonly : Optional[bool] = None, disabled : Optional[bool] = None) -> None:
     if not hasattr(field, 'render_kw'):
-        field.render_kw = dict(readonly=readonly)
+        field.render_kw = dict()
     elif field.render_kw is None:
-        field.render_kw = dict(readonly=readonly)
-    else:
+        field.render_kw = dict()
+
+    if readonly is not None:
         field.render_kw['readonly'] = readonly
+    if disabled is not None:
+        field.render_kw['disabled'] = disabled
+
+    if (readonly is not None and readonly) or (disabled is not None and disabled):
+        field.data = data
 
-@load_gen.route('home', methods=['GET', 'POST'])
+@load_gen.route('home', methods=['GET'])
 def home():
     load_gen_client = LoadGeneratorClient()
 
-    form_start = LoadGenStartForm()
-    form_stop = LoadGenStopForm()
+    load_gen_client.connect()
+    status = load_gen_client.GetStatus(Empty())
+    load_gen_client.close()
+
+    request_types = status.parameters.request_types
+    _request_type_service_l2nm = RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM in request_types
+    _request_type_service_l3nm = RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM in request_types
+    _request_type_service_mw   = RequestTypeEnum.REQUESTTYPE_SERVICE_MW   in request_types
+    _request_type_service_tapi = RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI in request_types
+    _request_type_slice_l2nm   = RequestTypeEnum.REQUESTTYPE_SLICE_L2NM   in request_types
+    _request_type_slice_l3nm   = RequestTypeEnum.REQUESTTYPE_SLICE_L3NM   in request_types
+
+    _offered_load       = round(status.parameters.offered_load       , ndigits=4)
+    _holding_time       = round(status.parameters.holding_time       , ndigits=4)
+    _inter_arrival_time = round(status.parameters.inter_arrival_time , ndigits=4)
 
-    if form_start.validate_on_submit():
-        load_gen_params = Parameters()
-        load_gen_params.num_requests       = form_start.num_requests.data
-        load_gen_params.offered_load       = form_start.offered_load.data
-        load_gen_params.holding_time       = form_start.holding_time.data
-        load_gen_params.inter_arrival_time = form_start.inter_arrival_time.data
-        load_gen_params.do_teardown        = form_start.do_teardown.data
-        load_gen_params.dry_mode           = False
-        load_gen_params.record_to_dlt      = form_start.record_to_dlt.data
-        load_gen_params.dlt_domain_id      = form_start.dlt_domain_id.data
+    form = LoadGenForm()
+    set_properties(form.num_requests             , status.parameters.num_requests , readonly=status.running)
+    set_properties(form.offered_load             , _offered_load                  , readonly=status.running)
+    set_properties(form.holding_time             , _holding_time                  , readonly=status.running)
+    set_properties(form.inter_arrival_time       , _inter_arrival_time            , readonly=status.running)
+    set_properties(form.do_teardown              , status.parameters.do_teardown  , disabled=status.running)
+    set_properties(form.record_to_dlt            , status.parameters.record_to_dlt, disabled=status.running)
+    set_properties(form.dlt_domain_id            , status.parameters.dlt_domain_id, readonly=status.running)
+    set_properties(form.request_type_service_l2nm, _request_type_service_l2nm     , disabled=status.running)
+    set_properties(form.request_type_service_l3nm, _request_type_service_l3nm     , disabled=status.running)
+    set_properties(form.request_type_service_mw  , _request_type_service_mw       , disabled=status.running)
+    set_properties(form.request_type_service_tapi, _request_type_service_tapi     , disabled=status.running)
+    set_properties(form.request_type_slice_l2nm  , _request_type_slice_l2nm       , disabled=status.running)
+    set_properties(form.request_type_slice_l3nm  , _request_type_slice_l3nm       , disabled=status.running)
+    set_properties(form.num_generated            , status.num_generated           , disabled=True)
+    set_properties(form.infinite_loop            , status.infinite_loop           , disabled=True)
+    set_properties(form.running                  , status.running                 , disabled=True)
 
-        del load_gen_params.request_types[:] # pylint: disable=no-member
-        request_types = list()
-        if form_start.request_type_service_l2nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM)
-        if form_start.request_type_service_l3nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM)
-        if form_start.request_type_service_mw  .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_MW  )
-        if form_start.request_type_service_tapi.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI)
-        if form_start.request_type_slice_l2nm  .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L2NM  )
-        if form_start.request_type_slice_l3nm  .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L3NM  )
-        load_gen_params.request_types.extend(request_types) # pylint: disable=no-member
+    form.submit.label.text = 'Stop' if status.running else 'Start'
+    form_action = url_for('load_gen.stop') if status.running else url_for('load_gen.start')
+    return render_template('load_gen/home.html', form=form, form_action=form_action)
 
+@load_gen.route('start', methods=['POST'])
+def start():
+    form = LoadGenForm()
+    if form.validate_on_submit():
         try:
+            load_gen_params = Parameters()
+            load_gen_params.num_requests       = form.num_requests.data
+            load_gen_params.offered_load       = form.offered_load.data
+            load_gen_params.holding_time       = form.holding_time.data
+            load_gen_params.inter_arrival_time = form.inter_arrival_time.data
+            load_gen_params.do_teardown        = form.do_teardown.data
+            load_gen_params.dry_mode           = False
+            load_gen_params.record_to_dlt      = form.record_to_dlt.data
+            load_gen_params.dlt_domain_id      = form.dlt_domain_id.data
+
+            del load_gen_params.request_types[:] # pylint: disable=no-member
+            request_types = list()
+            if form.request_type_service_l2nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM)
+            if form.request_type_service_l3nm.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM)
+            if form.request_type_service_mw  .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_MW  )
+            if form.request_type_service_tapi.data: request_types.append(RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI)
+            if form.request_type_slice_l2nm  .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L2NM  )
+            if form.request_type_slice_l3nm  .data: request_types.append(RequestTypeEnum.REQUESTTYPE_SLICE_L3NM  )
+            load_gen_params.request_types.extend(request_types) # pylint: disable=no-member
+
+            load_gen_client = LoadGeneratorClient()
             load_gen_client.connect()
             load_gen_client.Start(load_gen_params)
             load_gen_client.close()
             flash('Load Generator Started.', 'success')
         except Exception as e: # pylint: disable=broad-except
             flash('Problem starting Load Generator. {:s}'.format(str(e)), 'danger')
+    return redirect(url_for('load_gen.home'))
 
-    if form_stop.validate_on_submit():
+@load_gen.route('stop', methods=['POST'])
+def stop():
+    form = LoadGenForm()
+    if form.validate_on_submit():
         try:
+            load_gen_client = LoadGeneratorClient()
             load_gen_client.connect()
             load_gen_client.Stop(Empty())
             load_gen_client.close()
             flash('Load Generator Stopped.', 'success')
         except Exception as e: # pylint: disable=broad-except
             flash('Problem stopping Load Generator. {:s}'.format(str(e)), 'danger')
-
-    load_gen_client.connect()
-    status = load_gen_client.GetStatus(Empty())
-    load_gen_client.close()
-
-    form_start.num_requests      .default = status.parameters.num_requests
-    form_start.offered_load      .default = status.parameters.offered_load
-    form_start.holding_time      .default = status.parameters.holding_time
-    form_start.inter_arrival_time.default = status.parameters.inter_arrival_time
-    form_start.do_teardown       .default = status.parameters.do_teardown
-    form_start.record_to_dlt     .default = status.parameters.record_to_dlt
-    form_start.dlt_domain_id     .default = status.parameters.dlt_domain_id
-    form_start.num_generated     .default = status.num_generated
-    form_start.infinite_loop     .default = status.infinite_loop
-    form_start.running           .default = status.running
-
-    request_types = status.parameters.request_types
-    form_start.request_type_service_l2nm.default = RequestTypeEnum.REQUESTTYPE_SERVICE_L2NM in request_types
-    form_start.request_type_service_l3nm.default = RequestTypeEnum.REQUESTTYPE_SERVICE_L3NM in request_types
-    form_start.request_type_service_mw  .default = RequestTypeEnum.REQUESTTYPE_SERVICE_MW   in request_types
-    form_start.request_type_service_tapi.default = RequestTypeEnum.REQUESTTYPE_SERVICE_TAPI in request_types
-    form_start.request_type_slice_l2nm  .default = RequestTypeEnum.REQUESTTYPE_SLICE_L2NM   in request_types
-    form_start.request_type_slice_l3nm  .default = RequestTypeEnum.REQUESTTYPE_SLICE_L3NM   in request_types
-
-    make_read_only(form_start.num_requests             , status.running)
-    make_read_only(form_start.offered_load             , status.running)
-    make_read_only(form_start.holding_time             , status.running)
-    make_read_only(form_start.inter_arrival_time       , status.running)
-    make_read_only(form_start.do_teardown              , status.running)
-    make_read_only(form_start.record_to_dlt            , status.running)
-    make_read_only(form_start.dlt_domain_id            , status.running)
-    make_read_only(form_start.request_type_service_l2nm, status.running)
-    make_read_only(form_start.request_type_service_l3nm, status.running)
-    make_read_only(form_start.request_type_service_mw  , status.running)
-    make_read_only(form_start.request_type_service_tapi, status.running)
-    make_read_only(form_start.request_type_slice_l2nm  , status.running)
-    make_read_only(form_start.request_type_slice_l3nm  , status.running)
-
-    return render_template('load_gen/home.html', form_start=form_start, form_stop=form_stop, is_running=status.running)
+    return redirect(url_for('load_gen.home'))
diff --git a/src/webui/service/templates/load_gen/home.html b/src/webui/service/templates/load_gen/home.html
index 684e60ed5..d58f42601 100644
--- a/src/webui/service/templates/load_gen/home.html
+++ b/src/webui/service/templates/load_gen/home.html
@@ -20,36 +20,34 @@
     <h1>Load Generator</h1>
     <br />
 
-    <form id="load_gen_start" method="POST">
-        {% if not is_running %}
-        {{ form_start.hidden_tag() }}
-        {% endif %}
+    <form id="load_gen_form" method="POST" action="{{ form_action }}">
+        {{ form.hidden_tag() }}
         <fieldset>
             <div class="row mb-3">
-                {{ form_start.num_requests.label(class="col-sm-2 col-form-label") }}
+                {{ form.num_requests.label(class="col-sm-2 col-form-label") }}
                 <div class="col-sm-10">
-                    {% if form_start.num_requests.errors %}
-                        {{ form_start.num_requests(class="form-control is-invalid") }}
+                    {% if form.num_requests.errors %}
+                        {{ form.num_requests(class="form-control is-invalid") }}
                         <div class="invalid-feedback">
-                            {% for error in form_start.num_requests.errors %}<span>{{ error }}</span>{% endfor %}
+                            {% for error in form.num_requests.errors %}<span>{{ error }}</span>{% endfor %}
                         </div>
                     {% else %}
-                        {{ form_start.num_requests(class="form-control") }}
+                        {{ form.num_requests(class="form-control") }}
                     {% endif %}
                 </div>
             </div>
             <br />
 
             <div class="row mb-3">
-                {{ form_start.num_generated.label(class="col-sm-2 col-form-label") }}
+                {{ form.num_generated.label(class="col-sm-2 col-form-label") }}
                 <div class="col-sm-10">
-                    {% if form_start.num_generated.errors %}
-                        {{ form_start.num_generated(class="form-control is-invalid") }}
+                    {% if form.num_generated.errors %}
+                        {{ form.num_generated(class="form-control is-invalid") }}
                         <div class="invalid-feedback">
-                            {% for error in form_start.num_generated.errors %}<span>{{ error }}</span>{% endfor %}
+                            {% for error in form.num_generated.errors %}<span>{{ error }}</span>{% endfor %}
                         </div>
                     {% else %}
-                        {{ form_start.num_generated(class="form-control") }}
+                        {{ form.num_generated(class="form-control") }}
                     {% endif %}
                 </div>
             </div>
@@ -58,58 +56,58 @@
             <div class="row mb-3">
                 <div class="col-sm-2 col-form-label">Service Types:</div>
                 <div class="col-sm-10">
-                    {{ form_start.request_type_slice_l2nm   }} {{ form_start.request_type_slice_l2nm  .label(class="col-sm-3 col-form-label") }}
-                    {{ form_start.request_type_slice_l3nm   }} {{ form_start.request_type_slice_l3nm  .label(class="col-sm-3 col-form-label") }}
+                    {{ form.request_type_slice_l2nm   }} {{ form.request_type_slice_l2nm  .label(class="col-sm-3 col-form-label") }}
+                    {{ form.request_type_slice_l3nm   }} {{ form.request_type_slice_l3nm  .label(class="col-sm-3 col-form-label") }}
                     <br/>
-                    {{ form_start.request_type_service_l2nm }} {{ form_start.request_type_service_l2nm.label(class="col-sm-3 col-form-label") }}
-                    {{ form_start.request_type_service_l3nm }} {{ form_start.request_type_service_l3nm.label(class="col-sm-3 col-form-label") }}
+                    {{ form.request_type_service_l2nm }} {{ form.request_type_service_l2nm.label(class="col-sm-3 col-form-label") }}
+                    {{ form.request_type_service_l3nm }} {{ form.request_type_service_l3nm.label(class="col-sm-3 col-form-label") }}
                     <br/>
-                    {{ form_start.request_type_service_mw   }} {{ form_start.request_type_service_mw  .label(class="col-sm-3 col-form-label") }}
-                    {{ form_start.request_type_service_tapi }} {{ form_start.request_type_service_tapi.label(class="col-sm-3 col-form-label") }}
+                    {{ form.request_type_service_mw   }} {{ form.request_type_service_mw  .label(class="col-sm-3 col-form-label") }}
+                    {{ form.request_type_service_tapi }} {{ form.request_type_service_tapi.label(class="col-sm-3 col-form-label") }}
                 </div>
             </div>
             <br />
 
             <div class="row mb-3">
-                {{ form_start.offered_load.label(class="col-sm-2 col-form-label") }}
+                {{ form.offered_load.label(class="col-sm-2 col-form-label") }}
                 <div class="col-sm-10">
-                    {% if form_start.offered_load.errors %}
-                        {{ form_start.offered_load(class="form-control is-invalid") }}
+                    {% if form.offered_load.errors %}
+                        {{ form.offered_load(class="form-control is-invalid") }}
                         <div class="invalid-feedback">
-                            {% for error in form_start.offered_load.errors %}<span>{{ error }}</span>{% endfor %}
+                            {% for error in form.offered_load.errors %}<span>{{ error }}</span>{% endfor %}
                         </div>
                     {% else %}
-                        {{ form_start.offered_load(class="form-control") }}
+                        {{ form.offered_load(class="form-control") }}
                     {% endif %}
                 </div>
             </div>
             <br />
 
             <div class="row mb-3">
-                {{ form_start.holding_time.label(class="col-sm-2 col-form-label") }}
+                {{ form.holding_time.label(class="col-sm-2 col-form-label") }}
                 <div class="col-sm-10">
-                    {% if form_start.holding_time.errors %}
-                        {{ form_start.holding_time(class="form-control is-invalid") }}
+                    {% if form.holding_time.errors %}
+                        {{ form.holding_time(class="form-control is-invalid") }}
                         <div class="invalid-feedback">
-                            {% for error in form_start.holding_time.errors %}<span>{{ error }}</span>{% endfor %}
+                            {% for error in form.holding_time.errors %}<span>{{ error }}</span>{% endfor %}
                         </div>
                     {% else %}
-                        {{ form_start.holding_time(class="form-control") }}
+                        {{ form.holding_time(class="form-control") }}
                     {% endif %}
                 </div>
             </div>
             <br />
 
             <div class="row mb-3">
-                {{ form_start.inter_arrival_time.label(class="col-sm-2 col-form-label") }}
+                {{ form.inter_arrival_time.label(class="col-sm-2 col-form-label") }}
                 <div class="col-sm-10">
-                    {% if form_start.inter_arrival_time.errors %}
-                        {{ form_start.inter_arrival_time(class="form-control is-invalid") }}
+                    {% if form.inter_arrival_time.errors %}
+                        {{ form.inter_arrival_time(class="form-control is-invalid") }}
                         <div class="invalid-feedback">
-                            {% for error in form_start.inter_arrival_time.errors %}<span>{{ error }}</span>{% endfor %}
+                            {% for error in form.inter_arrival_time.errors %}<span>{{ error }}</span>{% endfor %}
                         </div>
                     {% else %}
-                        {{ form_start.inter_arrival_time(class="form-control") }}
+                        {{ form.inter_arrival_time(class="form-control") }}
                     {% endif %}
                 </div>
             </div>
@@ -117,7 +115,7 @@
 
             <div class="row mb-3">
                 <div class="col-sm-10">
-                    {{ form_start.do_teardown }} {{ form_start.do_teardown.label(class="col-sm-3 col-form-label") }}<br/>
+                    {{ form.do_teardown }} {{ form.do_teardown.label(class="col-sm-3 col-form-label") }}<br/>
                 </div>
             </div>
             <br />
@@ -125,15 +123,15 @@
             <div class="row mb-3">
                 <div class="col-sm-2 col-form-label">DLT Settings:</div>
                 <div class="col-sm-10">
-                    {{ form_start.record_to_dlt }} {{ form_start.record_to_dlt.label(class="col-sm-3 col-form-label") }} <br/>
-                    {{ form_start.dlt_domain_id.label(class="col-sm-2 col-form-label") }}
-                    {% if form_start.dlt_domain_id.errors %}
-                        {{ form_start.dlt_domain_id(class="form-control is-invalid") }}
+                    {{ form.record_to_dlt }} {{ form.record_to_dlt.label(class="col-sm-3 col-form-label") }} <br/>
+                    {{ form.dlt_domain_id.label(class="col-sm-2 col-form-label") }}
+                    {% if form.dlt_domain_id.errors %}
+                        {{ form.dlt_domain_id(class="form-control is-invalid") }}
                         <div class="invalid-feedback">
-                            {% for error in form_start.dlt_domain_id.errors %}<span>{{ error }}</span>{% endfor %}
+                            {% for error in form.dlt_domain_id.errors %}<span>{{ error }}</span>{% endfor %}
                         </div>
                     {% else %}
-                        {{ form_start.dlt_domain_id(class="form-control") }}
+                        {{ form.dlt_domain_id(class="form-control") }}
                     {% endif %}
                 </div>
             </div>
@@ -142,29 +140,16 @@
             <div class="row mb-3">
                 <div class="col-sm-2 col-form-label">Status:</div>
                 <div class="col-sm-10">
-                    {{ form_start.infinite_loop }} {{ form_start.infinite_loop.label(class="col-sm-3 col-form-label") }}
-                    {{ form_start.running }} {{ form_start.running.label(class="col-sm-3 col-form-label") }}
+                    {{ form.infinite_loop }} {{ form.infinite_loop.label(class="col-sm-3 col-form-label") }}
+                    {{ form.running }} {{ form.running.label(class="col-sm-3 col-form-label") }}
                 </div>
             </div>
             <br />
 
-            {% if not is_running %}
             <div class="d-grid gap-2 d-md-flex justify-content-md-start">
-                {{ form_start.submit(class="btn btn-primary") }}
+                {{ form.submit(class="btn btn-primary") }}
             </div>
-            {% endif %}
         </fieldset>
     </form>
 
-    {% if is_running %}
-    <form id="load_gen_stop" method="POST">
-        {{ form_stop.hidden_tag() }}
-        <fieldset>
-            <div class="d-grid gap-2 d-md-flex justify-content-md-start">
-                {{ form_stop.submit(class="btn btn-primary") }}
-            </div>
-        </fieldset>
-    </form>
-    {% endif %}
-
 {% endblock %}
-- 
GitLab


From 2333c8fa0090e5dab330eacf2cd885c5529818d1 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 15:05:28 +0000
Subject: [PATCH 087/229] Slice component:

- Reduced log level in MetricsExporter
---
 src/slice/service/slice_grouper/MetricsExporter.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/slice/service/slice_grouper/MetricsExporter.py b/src/slice/service/slice_grouper/MetricsExporter.py
index ce3d88b80..3708641ee 100644
--- a/src/slice/service/slice_grouper/MetricsExporter.py
+++ b/src/slice/service/slice_grouper/MetricsExporter.py
@@ -82,7 +82,7 @@ class MetricsExporter():
                 with Sender(METRICSDB_HOSTNAME, METRICSDB_ILP_PORT) as sender:
                     sender.row(METRICSDB_TABLE_SLICE_GROUPS, symbols=symbols, columns=columns, at=dt_timestamp)
                     sender.flush()
-                LOGGER.info(MSG_EXPORT_EXECUTED.format(str(dt_timestamp), str(symbols), str(columns)))
+                LOGGER.debug(MSG_EXPORT_EXECUTED.format(str(dt_timestamp), str(symbols), str(columns)))
                 return
             except (Exception, IngressError): # pylint: disable=broad-except
                 LOGGER.exception(MSG_EXPORT_FAILED.format(
@@ -95,7 +95,7 @@ class MetricsExporter():
         try:
             result = self.rest_request(sql_query)
             if not result: raise Exception
-            LOGGER.info('Point {:s} deleted'.format(str(slice_uuid)))
+            LOGGER.debug('Point {:s} deleted'.format(str(slice_uuid)))
         except Exception as e:
             LOGGER.warning('Point {:s} cannot be deleted. {:s}'.format(str(slice_uuid), str(e)))
             raise
@@ -114,10 +114,10 @@ class MetricsExporter():
 
                 json_response = response.json()
                 if 'ddl' in json_response:
-                    LOGGER.info(MSG_REST_EXECUTED.format(str(rest_query), str(json_response['ddl'])))
+                    LOGGER.debug(MSG_REST_EXECUTED.format(str(rest_query), str(json_response['ddl'])))
                     return True
                 elif 'dataset' in json_response:
-                    LOGGER.info(MSG_REST_EXECUTED.format(str(rest_query), str(json_response['dataset'])))
+                    LOGGER.debug(MSG_REST_EXECUTED.format(str(rest_query), str(json_response['dataset'])))
                     return json_response['dataset']
 
             except Exception: # pylint: disable=broad-except
-- 
GitLab


From 8f898f427a51002b2339b65db6f2f2884b8f72f5 Mon Sep 17 00:00:00 2001
From: Lluis Gifre Renom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 15:13:14 +0000
Subject: [PATCH 088/229] Device component - IETF L2VPN Driver:

- Added files
---
 .../drivers/ietf_l2vpn/IetfL2VpnDriver.py       | 17 +++++++++++++++++
 .../service/drivers/ietf_l2vpn/__init__.py      | 13 +++++++++++++
 2 files changed, 30 insertions(+)
 create mode 100644 src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
 create mode 100644 src/device/service/drivers/ietf_l2vpn/__init__.py

diff --git a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
new file mode 100644
index 000000000..1b1217636
--- /dev/null
+++ b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
@@ -0,0 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+class IetfL2VpnDriver:
+    def __init__(self) -> None:
+        pass
diff --git a/src/device/service/drivers/ietf_l2vpn/__init__.py b/src/device/service/drivers/ietf_l2vpn/__init__.py
new file mode 100644
index 000000000..38d04994f
--- /dev/null
+++ b/src/device/service/drivers/ietf_l2vpn/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
-- 
GitLab


From ab663513ccda05340aa88222deca2e03887a961e Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 15:15:35 +0000
Subject: [PATCH 089/229] Load-Generator component:

- Corrected termination conditions
---
 src/load_generator/load_gen/RequestScheduler.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/load_generator/load_gen/RequestScheduler.py b/src/load_generator/load_gen/RequestScheduler.py
index 13ae70deb..57afe80be 100644
--- a/src/load_generator/load_gen/RequestScheduler.py
+++ b/src/load_generator/load_gen/RequestScheduler.py
@@ -49,7 +49,7 @@ class RequestScheduler:
         self._running = threading.Event()
 
     @property
-    def num_generated(self): return max(self._generator.num_generated, self._parameters.num_requests)
+    def num_generated(self): return min(self._generator.num_generated, self._parameters.num_requests)
 
     @property
     def infinite_loop(self): return self._generator.infinite_loop
-- 
GitLab


From 4af69bbb6cc438391df5f5d1200c821477ad39fb Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 16:01:29 +0000
Subject: [PATCH 090/229] Common / Proto / Components:

- Added device type "TeraFlowSDN controller"
- Added driver type for IETF L2VPN
- Updated corresponding components
---
 proto/context.proto                              |   1 +
 .../java/eu/teraflow/automation/Serializer.java  |   4 ++++
 .../eu/teraflow/automation/SerializerTest.java   |   2 ++
 .../grpc/context/ContextOuterClass.java          |   9 +++++++++
 src/common/DeviceTypes.py                        |   5 ++++-
 src/common/tools/object_factory/Device.py        |  10 ++++++++++
 src/common/type_checkers/Assertions.py           |   1 +
 .../database/models/enums/DeviceDriver.py        |   1 +
 .../main/java/eu/teraflow/policy/Serializer.java |   4 ++++
 .../java/eu/teraflow/policy/SerializerTest.java  |   2 ++
 .../grpc/context/ContextOuterClass.java          |   9 +++++++++
 .../service/service_handler_api/FilterFields.py  |   3 ++-
 src/webui/service/device/forms.py                |   1 +
 src/webui/service/device/routes.py               |   2 ++
 .../static/topology_icons/teraflowsdn.png        | Bin 0 -> 8751 bytes
 15 files changed, 52 insertions(+), 2 deletions(-)
 create mode 100644 src/webui/service/static/topology_icons/teraflowsdn.png

diff --git a/proto/context.proto b/proto/context.proto
index 49d16229c..2dfbb7805 100644
--- a/proto/context.proto
+++ b/proto/context.proto
@@ -191,6 +191,7 @@ enum DeviceDriverEnum {
   DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4;
   DEVICEDRIVER_ONF_TR_352 = 5;
   DEVICEDRIVER_XR = 6;
+  DEVICEDRIVER_IETF_L2VPN = 7;
 }
 
 enum DeviceOperationalStatusEnum {
diff --git a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
index 08691b526..b0729aa55 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
@@ -853,6 +853,8 @@ public class Serializer {
                 return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352;
             case XR:
                 return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_XR;
+            case IETF_L2VPN:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN;
             case UNDEFINED:
             default:
                 return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED;
@@ -874,6 +876,8 @@ public class Serializer {
                 return DeviceDriverEnum.ONF_TR_352;
             case DEVICEDRIVER_XR:
                 return DeviceDriverEnum.XR;
+            case DEVICEDRIVER_IETF_L2VPN:
+                return DeviceDriverEnum.IETF_L2VPN;
             case DEVICEDRIVER_UNDEFINED:
             case UNRECOGNIZED:
             default:
diff --git a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
index 494e608a1..0931054c6 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
@@ -1215,6 +1215,8 @@ class SerializerTest {
                         DeviceDriverEnum.ONF_TR_352,
                         ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352),
                 Arguments.of(DeviceDriverEnum.XR, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_XR),
+                Arguments.of(
+                        DeviceDriverEnum.IETF_L2VPN, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN),
                 Arguments.of(
                         DeviceDriverEnum.UNDEFINED, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED));
     }
diff --git a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
index 060e81a55..b1bccdecc 100644
--- a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -177,6 +177,10 @@ public final class ContextOuterClass {
      * <code>DEVICEDRIVER_XR = 6;</code>
      */
     DEVICEDRIVER_XR(6),
+    /**
+     * <code>DEVICEDRIVER_IETF_L2VPN = 7;</code>
+     */
+    DEVICEDRIVER_IETF_L2VPN(7),
     UNRECOGNIZED(-1),
     ;
 
@@ -212,6 +216,10 @@ public final class ContextOuterClass {
      * <code>DEVICEDRIVER_XR = 6;</code>
      */
     public static final int DEVICEDRIVER_XR_VALUE = 6;
+    /**
+     * <code>DEVICEDRIVER_IETF_L2VPN = 7;</code>
+     */
+    public static final int DEVICEDRIVER_IETF_L2VPN_VALUE = 7;
 
 
     public final int getNumber() {
@@ -245,6 +253,7 @@ public final class ContextOuterClass {
         case 4: return DEVICEDRIVER_IETF_NETWORK_TOPOLOGY;
         case 5: return DEVICEDRIVER_ONF_TR_352;
         case 6: return DEVICEDRIVER_XR;
+        case 7: return DEVICEDRIVER_IETF_L2VPN;
         default: return null;
       }
     }
diff --git a/src/common/DeviceTypes.py b/src/common/DeviceTypes.py
index 99255defd..2cb1fb4f0 100644
--- a/src/common/DeviceTypes.py
+++ b/src/common/DeviceTypes.py
@@ -38,4 +38,7 @@ class DeviceTypeEnum(Enum):
     P4_SWITCH                       = 'p4-switch'
     PACKET_ROUTER                   = 'packet-router'
     PACKET_SWITCH                   = 'packet-switch'
-    XR_CONSTELLATION                = 'xr-constellation'
\ No newline at end of file
+    XR_CONSTELLATION                = 'xr-constellation'
+
+    # ETSI TeraFlowSDN controller
+    TERAFLOWSDN_CONTROLLER          = 'teraflowsdn'
diff --git a/src/common/tools/object_factory/Device.py b/src/common/tools/object_factory/Device.py
index 0cc4555d4..66c87b14d 100644
--- a/src/common/tools/object_factory/Device.py
+++ b/src/common/tools/object_factory/Device.py
@@ -43,6 +43,9 @@ DEVICE_MICROWAVE_DRIVERS = [DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY]
 DEVICE_P4_TYPE      = DeviceTypeEnum.P4_SWITCH.value
 DEVICE_P4_DRIVERS   = [DeviceDriverEnum.DEVICEDRIVER_P4]
 
+DEVICE_TFS_TYPE    = DeviceTypeEnum.TERAFLOWSDN_CONTROLLER.value
+DEVICE_TFS_DRIVERS = [DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN]
+
 def json_device_id(device_uuid : str):
     return {'device_uuid': {'uuid': device_uuid}}
 
@@ -120,6 +123,13 @@ def json_device_p4_disabled(
     return json_device(
         device_uuid, DEVICE_P4_TYPE, DEVICE_DISABLED, endpoints=endpoints, config_rules=config_rules, drivers=drivers)
 
+def json_device_tfs_disabled(
+        device_uuid : str, endpoints : List[Dict] = [], config_rules : List[Dict] = [],
+        drivers : List[Dict] = DEVICE_TFS_DRIVERS
+    ):
+    return json_device(
+        device_uuid, DEVICE_TFS_TYPE, DEVICE_DISABLED, endpoints=endpoints, config_rules=config_rules, drivers=drivers)
+
 def json_device_connect_rules(address : str, port : int, settings : Dict = {}):
     return [
         json_config_rule_set('_connect/address',  address),
diff --git a/src/common/type_checkers/Assertions.py b/src/common/type_checkers/Assertions.py
index c0442d877..ba82e535e 100644
--- a/src/common/type_checkers/Assertions.py
+++ b/src/common/type_checkers/Assertions.py
@@ -33,6 +33,7 @@ def validate_device_driver_enum(message):
         'DEVICEDRIVER_IETF_NETWORK_TOPOLOGY',
         'DEVICEDRIVER_ONF_TR_352',
         'DEVICEDRIVER_XR',
+        'DEVICEDRIVER_IETF_L2VPN',
     ]
 
 def validate_device_operational_status_enum(message):
diff --git a/src/context/service/database/models/enums/DeviceDriver.py b/src/context/service/database/models/enums/DeviceDriver.py
index 6997e7dfb..a612803e2 100644
--- a/src/context/service/database/models/enums/DeviceDriver.py
+++ b/src/context/service/database/models/enums/DeviceDriver.py
@@ -24,6 +24,7 @@ class ORM_DeviceDriverEnum(enum.Enum):
     IETF_NETWORK_TOPOLOGY = DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY
     ONF_TR_352            = DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352
     XR                    = DeviceDriverEnum.DEVICEDRIVER_XR
+    IETF_L2VPN            = DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN
 
 grpc_to_enum__device_driver = functools.partial(
     grpc_to_enum, DeviceDriverEnum, ORM_DeviceDriverEnum)
diff --git a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
index 529ec6334..967d1d6e6 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
@@ -2245,6 +2245,8 @@ public class Serializer {
                 return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352;
             case XR:
                 return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_XR;
+            case IETF_L2VPN:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN;
             case UNDEFINED:
             default:
                 return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED;
@@ -2266,6 +2268,8 @@ public class Serializer {
                 return DeviceDriverEnum.ONF_TR_352;
             case DEVICEDRIVER_XR:
                 return DeviceDriverEnum.XR;
+            case DEVICEDRIVER_IETF_L2VPN:
+                return DeviceDriverEnum.IETF_L2VPN;
             case DEVICEDRIVER_UNDEFINED:
             case UNRECOGNIZED:
             default:
diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
index d284840b8..641026461 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
@@ -3600,6 +3600,8 @@ class SerializerTest {
                         DeviceDriverEnum.ONF_TR_352,
                         ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352),
                 Arguments.of(DeviceDriverEnum.XR, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_XR),
+                Arguments.of(
+                        DeviceDriverEnum.IETF_L2VPN, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN),
                 Arguments.of(
                         DeviceDriverEnum.UNDEFINED, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED));
     }
diff --git a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
index fbbba62a2..53252341b 100644
--- a/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/policy/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -177,6 +177,10 @@ public final class ContextOuterClass {
      * <code>DEVICEDRIVER_XR = 6;</code>
      */
     DEVICEDRIVER_XR(6),
+    /**
+     * <code>DEVICEDRIVER_IETF_L2VPN = 7;</code>
+     */
+    DEVICEDRIVER_IETF_L2VPN(7),
     UNRECOGNIZED(-1),
     ;
 
@@ -212,6 +216,10 @@ public final class ContextOuterClass {
      * <code>DEVICEDRIVER_XR = 6;</code>
      */
     public static final int DEVICEDRIVER_XR_VALUE = 6;
+    /**
+     * <code>DEVICEDRIVER_IETF_L2VPN = 7;</code>
+     */
+    public static final int DEVICEDRIVER_IETF_L2VPN_VALUE = 7;
 
 
     public final int getNumber() {
@@ -245,6 +253,7 @@ public final class ContextOuterClass {
         case 4: return DEVICEDRIVER_IETF_NETWORK_TOPOLOGY;
         case 5: return DEVICEDRIVER_ONF_TR_352;
         case 6: return DEVICEDRIVER_XR;
+        case 7: return DEVICEDRIVER_IETF_L2VPN;
         default: return null;
       }
     }
diff --git a/src/service/service/service_handler_api/FilterFields.py b/src/service/service/service_handler_api/FilterFields.py
index a73ec53f3..3ec71dc64 100644
--- a/src/service/service/service_handler_api/FilterFields.py
+++ b/src/service/service/service_handler_api/FilterFields.py
@@ -33,7 +33,8 @@ DEVICE_DRIVER_VALUES = {
     DeviceDriverEnum.DEVICEDRIVER_P4,
     DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY,
     DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352,
-    DeviceDriverEnum.DEVICEDRIVER_XR
+    DeviceDriverEnum.DEVICEDRIVER_XR,
+    DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN,
 }
 
 # Map allowed filter fields to allowed values per Filter field. If no restriction (free text) None is specified
diff --git a/src/webui/service/device/forms.py b/src/webui/service/device/forms.py
index c6bacac9b..24bc92b3a 100644
--- a/src/webui/service/device/forms.py
+++ b/src/webui/service/device/forms.py
@@ -29,6 +29,7 @@ class AddDeviceForm(FlaskForm):
     device_drivers_ietf_network_topology = BooleanField('IETF_NETWORK_TOPOLOGY')
     device_drivers_onf_tr_352 = BooleanField('ONF_TR_352')
     device_drivers_xr = BooleanField('XR')
+    device_drivers_ietf_l2vpn = BooleanField('IETF L2VPN')
     device_config_address = StringField('connect/address',default='127.0.0.1',validators=[DataRequired(), Length(min=5)])
     device_config_port = StringField('connect/port',default='0',validators=[DataRequired(), Length(min=1)])
     device_config_settings = TextAreaField('connect/settings',default='{}',validators=[DataRequired(), Length(min=2)])
diff --git a/src/webui/service/device/routes.py b/src/webui/service/device/routes.py
index ebf77a35f..bc4684770 100644
--- a/src/webui/service/device/routes.py
+++ b/src/webui/service/device/routes.py
@@ -120,6 +120,8 @@ def add():
             device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352)
         if form.device_drivers_xr.data:
             device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_XR)
+        if form.device_drivers_ietf_l2vpn.data:
+            device_drivers.append(DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN)
         device_obj.device_drivers.extend(device_drivers) # pylint: disable=no-member
 
         try:
diff --git a/src/webui/service/static/topology_icons/teraflowsdn.png b/src/webui/service/static/topology_icons/teraflowsdn.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed2232e8223a39eb0d829e0e50975a697b0660fc
GIT binary patch
literal 8751
zcmeAS@N?(olHy`uVBq!ia0y~yU}#}rVCdmsV_;y|E6#X|fq}6#)7d$|)7e>}peR2r
zGbfdSL1SX=L|c!;0V1vb!LAd%*o`|ZQdanhxwx{3uS^ounX=7kHJ_UP-)1#l&#vyp
z526Y_q;Gun;L)1Z&8rnS{x$5_Wudvtqw~9JtC*qPjy?UK?^)g{msc>+^4YxW7^Cm@
zvmrKWsl}^<&TF%Da0H({b;d~O<x!rR>(_0WYW8=3()nLqzpl<S-%vq8@Vw#SEuH2a
z%gu9}Kih3Q;kC)D#?K}#sQE~LOt?+m<Cv1j2QwGV^gJuveI#gO^Hjbx)nMg$N_{J4
z`TcadmOS;dSo+$a<h6D`xt%L(RnL~LN<6Z$g=Nx&1q<4Yv^EGXja5JD)O9Y|?w{iI
z`6|<$))`4yiUqW?-Td18|KR(ZQLQIA^)*G9cg4#*PiA>>lXX_<@t<~ObDnVu)Ud7l
zvTgq@hBQ0R_1m|e5EQt_rnm0)tWE4O?--i>+j35=6Imj}#roiH&pu6do;ysn+4t^5
zJ-4W3Ffv*FRQkaK0SVopZ@bR#uC{*u?fu+qf9e=EhZY^=tYfTXU|?WN@^*J&_z!{$
z_AZ~yz`(#+;1OBOz#!!V!i+LHmU9>w7}!fZeO=j~Gl}p^s9C0XtY%<PVDNNt45_&F
zc5Zo1Na(Ns_RsIlJfkw%$3vO3g>&H%ktI3_8JAogL>NmG>vw4-IcvUJx2vJ!h0=~4
zyB<8^QgRhz&GZs9+tR?OvQR=u$crm;$(bdBX==gmp8s}Nuon!O!oYdw`)gBur=s}u
zcc15+xBYH&KC__<6`bmIjLBwv`t<2qy?<|>KcBvI*Oz0L6#ncle(q=Y{Z8?o$9>i-
zu4ZX^3aNS~Wn^f$_evf0xBolk=+UF8S*5Y^+w$+96OXHCoH%h}=|6EN0~M7PWw)LO
zU833%K|zyhob#T||Nlq*@ZrPyJ3IAacWsE>U3TSV$rP2&ef##+e7Wd8bM|cSt-oH~
z|DTwccqPMx<-mmt0cG#*%nS?+oTAdnaAS$5u-%Ub&1cS>*|YE8|Lgnzxq430IBj%$
zOXlI!)6)#i_4}WSit3m~?<jvC$0ujA!%u?W=0k&4N7c9e%a^N{TFF|My*Z)3??=<l
z%1RyW^$DIUXLfdW?)m@k_sYvJHBKAJSG`dD_hV|%`?FInW-Rer{&+>;;)-WyBzMK+
zMV-4jGu!U`=BH-2Wc7C4$*cSG@i-43-!g%w`ro(jhXh_>?(FQ$xx33WHS(Eqzs;dF
zYkai2W<OgM^<RAI?TE((8&|FBDt>-0H6cM^Yn1NuGc${8|NQ^)xIdWV;O_VPX3v~C
zGeo5IzMSqO?)kD$AKdJev3;*#e{<eZuhq?EyXU^&^O^5!mF?j}hko2GzrS+P4!3zV
zpFEio=G)aq#KictpFW#kukq+IH-GVqIWGS)|2h6kuNKpNp7o-{>gU6D`JlxYFPuN$
zukJr@Pu73$@Z!MC%$Kife}8LKnOFVJ(#6Fk;d!C)y{OrZPu_6d$hvc4`;8CtWi5Xs
zc&l-6E<WDl*e#|uW!khy2O62PdgGK=hp%t*TYgwN-^V>6Kwz7^_Q5Y#UwWKf@3i%9
zZ%nuB{C5`3=Y`H4Sjl1Y>4fr&J3Ea}oj$#>=;^7||K!eIjY-*jQ|{c!la2ua0>8ez
zWj}4n9`@#Jvy+pucfpQq))y}oAJ2AnmAIiNP`K9j#r^&AV!BZ+vAfF>A0O)t5n-LA
zvU2Nh=?N;F?tL-`XXo$h+_A&r$dMxpwya{y<`Z+$_Eunc&icPPL-mjTQW57{><gFf
z7u>jUqlcH*p@)atUxy2*JS^HNAS%k5pP&CE{OW@zH?t}-Qg(>`d$H?Q{bsK<FYaBF
z4-5<p5Mi}0f9DbuG%0HLe)T{VmNjA8Edm_5*Lc{P#Xo7iHJD!<6X(xx>b&)Y_%!zr
zWBDUTjybKqdMI!E_4Nv`^sZ$ncrtBb$uJeVllPP>QqL)nW5S9RD;O9oWcVU<#5feM
zNd1%DaX0V8CLXP=|E9J6xY@I4k-#Jd5!c4Ae<~;JU;Dc(v}r=BWL#Vv$mKT=IhkY&
zHm+McE1`Usq@4JywNaV^c2&H)wtj6s{PMub$?6L)W*F4{sW>y++&}d2`;_nR?(TU$
zuX@7FnVp}yyiC6GyS+|e_F5$)ARg7$y@lh8i^~M@H)Ym-b1WFApKd*H;K1s7*VwbJ
zY|RTxb8>W6tzNw`?QB%VYm<sH2XB|Qip9s49(Wn_pg{9Nc52UC>Ao;u-X9O!MO4((
zoR(i!G&2iZdo_DO{{4N6DnCE-@b^D{PWJZ2Bi`NiUpbmJ4+xhn|Ly*7y1}k!2_Hwc
zC(oZhzOc|)q4VG0-`D^9{(Y)nzfi?9=jtj^emNVD?YEC!^0E%En|?a-wegRG(=MOU
zSh3`GtTcDOq;Z=Q$F{t?vzGhK4LW=-`$@0)y#)eIb#--TPMuO(c_AkC@u$7%KhFK)
z*|-0ti1DY@FG_ZLPFn2Vug1{U+8Qf=fBEv|n|)`SO-Y@3cX#>ob91dDBO^VRUv`{+
z8AQ%Ldu+10|Hq@8!YeLjym<QbXe+n)s-zX{ese4i&a<r!;y9RhcUR%@KG`*E)+{;w
zbXNfT)_?xq-j8<_KGtYSaByI_z9zEx@1OmJkKNo{Tmm=_is?puc)5K3v*q*aPW}J;
zzW&dnZhec~Thcw<-HY4X*?HNR)6dOW*|kva=AKGpUo~M>&m<QYmie{cBK2Z-O^M!?
z^Kez@YKz=kCZOUkYVEXp_wLOx&A#^adwo)p((Uc}{tQ!8I_2c#N`IC{PSb2za4_M)
zp32W5hB54XvQ|g>WUb>K)$fgqe_qdUC2Q*(>+*N+KmC9I>ZiD<XyMT=(HmQ{#W!u<
zoVfX>!fB&frrB*XW=Pn4zf=6;#>U5{uA*YyPiLMwb;@6_B<pl@bMs&6Y}IRhzjrLS
z{8B(ntnBQ?u)@N^o1dPZ{#*9uM&q43F%fISGEAgeT3QxlUtd@8@8@$tNlDGT847wq
zadG#w%+1X&=WTbMmfF(R21+5<a|)cCn8fvBI)az`F)}nYHGOz8+5gePcDbyOh1p?Y
zV)nmYD9hMX2$-6he)#zDVD0z2?cs5iOXJ>bh|oFz<oWaZq|G-MT+9#<5o!7G;X}0c
zp7UqVKAl^B&vR{<H$Ojr*4C&j6Dc-!_W1jJmr56uzrR;%7W1c~veNX$zR>32%TG>D
z29=3%b&H)AxcAG=u&=i>k>X8>+_&ug#n)dm?(X`k`fd8usk}N`T3zfPW*gVor@p?n
zw&Lm3a0O2x5!anM7pG5~*0y5B3byC<zRtTBwzRZp|C^^WY0@NvtSc+58e_P_y{6^f
z+M@aIef@vy7`^MJ+>7??kzvpiW)7I$_0Q5e)bS6CYoJ2Qj-*x#8NMgap2byf)?i^`
zV$%CvTUu&bR9yV9Xy>|!iTkhi#h2`HyR5)^@xif0?L3l2M-_`Arx{j!NDvVhKVP`}
z?xXK@*Vf1LPYPdSFiD~F-rnlRQTq<RE$dD_J<W02)6+SEP6w`E7r(o^Je;-Av`5;U
zFLrm?-X;ACEe_pcx*z_0KCf(G@ZoFrTkAhTrwapXuAjQF(D^x!wAmY>hp{4udnAno
zgoQ6FEN+y(lqV`CwrSBKrg`(`b#!$6aCP63dD(5rk|hNf7rA!y_ph(M??20gb8q$c
zeQD}(+4mo0aq{rg?A@{B$IQIDyMC^X-7OXx8k%u$kLA3|XOcaV#?My0J#pfMf~SkS
zyZO6<Pghn3*Zh9FT~b!oH$OjLiib^#hwa$0W1s$hzyG{bSUu0{#n#;0W~VltIXBlj
z{@Y(}F`Wf*>z^-hY|e{{$S|9oUjOsybQyyLhF&*iUN+{vd-h03NuAo5e7xxVJlkG<
z<~>PAxwhrspXbDJYSWozzOy%#zP`r8$+<9WwJL*~yL<7)MXn*NAOBkxJYaC|lkwae
z=dZ|8TU&c`RjBs1jEhZHbNd)xJbrxmdVKxfk39<e|9-pu<?Gj_DxN)EU620!{5*5Q
zhIUQO<2%0Ze!nB(;PIZmzID>4_9`+P^g0N9{P@virq7hrng9O%t9iTi`i|V&|7T1p
z>bWoP^JrD*YRjxED|Q7wNj%(kcgNMp{nNK*U%!-La_REr$&20lmmLjq+kV@3_hHxQ
z-tKMOugzAiUj6gM;{KrZ*M%9j=ifhfJ5r#svhvNv#q6e1ytlXIo^ENe4H0QIJr}h<
zGCQVZ*PRlpxqrUz|L-d=FVCfDQTgdf+ikBYQ>XIodB5-Xt7~~ro;=xb?BSz-lhgKn
zKg;R&*QmEXe*VFh$4g6g-O<t1eApqVtl=s2`|E4>?xUa1yw&PB+ASWu{`zLm$!d4D
z<w}dXK76^TIA(`(_vNtVg{P)x{>iGBI~!W2)ph9R=Jd<QkGEUR?Ym$9zjp7v?7gm%
z>F4M5`g?gXdHT$^lU19{d0$5B(4Mt3H(1>%*lc#}?&QRSulZdTl~1vsSNkneMNLgf
zRh9Mkx3|Ap4mjOuTNAyVuWYyM`aPe-?-ZZ6^*C+czWrL-f(3W@raN&kR2!YKh)p`$
z;wUI#oW`>)?{3%K-R1w6nTnf-2%J25(qQ)4j_z*f>FdfBmtX1n|K>#F)xg=6S7JD3
zX`Qn+EdQLjCHtP>T&q&2-DPhl%$U)Ue7tYrmMtY)1s2_#wk1CM+@t4<8mhdRJTHBl
zHEY(76DK@={QjN%WyZw~)}lEcdM<r8x#qexxveUl<MiP56QwVmpWL5MQ<NxqzxT%e
zdizV4E(L^y9GNgd;Nk+7iBqStPU`6DYFfWuaHaYgjrC<${I37Mc#Ahu=!ALn#Lz0a
zxrhE<SQV=M=GInjZZVw$yGmcn{VQx*AvY;z{oc>#tXJr#*M2-IE@M+sP^+h2;TtG&
zBgf3e-Cfy2h2@%*x!*in{=IH(v!}1CEY#!@@}H`_u2gtN)RqRf#f@jve*3=G%bTHa
zC$BuWHQPi$TqHL8oM>DjQ^5`n&q)fNLLQ4YY!LYQ^XJzheJ2hM#Rb=2KP<3#bvAP8
z(xo1L>;CusJu0$YMMa?H@>+)u?Hzp#8hRTy9!%3(ym+yqr_iR&n*vJLNuB-s<%4lX
zU~c)}BWg+)RyeOt(2vj&OG!(OjoAEyZC>rSo9p!?e(#QxR*7b1Wwrfu&iZ}9t1BzN
zzT40})u8N6gihR^2oX`yz{MBO>}>nADJv_>F7x&_-A$V}2gbzk1iMIY$$Hf~CrCTR
z^Fh*MEryH~&bi7x1)4`@-ifi8>-XYoRYgUGiH+ltBS#Kom?#+<3fjxqHodd0denJO
zP3O+c=Fg^i90E%k9Q7aX{HH6J^Tol*N$XNj@WZE1TVK4$U}0so4U+%9=xWybX!Z|D
zr<oV*i*x1v{q61PySvMiUti1rc<IT>3X64?esgU5ZMwfUU1Bxa<ZyomLkZ9K)}uMc
z=C!a~xpHMe?(J<E*VaVt)!cuNZF|&~48!H#)Ab6h=FYGzRy(s)RpO$m$Yr^nBNzG(
zX5@c5YWueN!>bM3cD(05xMIzkLz7g!1EQk3IyyMMyt=wtX1iwcv7W~EcJ{RWzxBSo
zzu#}|>$d0j@r*zF=jmQhJ;Z<a*00Ae>(usGtPq_gVY4CeFx#8k+xaJ{JnXOklYH3p
z&1wDpOSW$}H<jX5_nqak`l{FV=!LhRuK9a2(%Cg|g~k(a{k<-VEQ|$rca?sX^4|ab
zUNy^sdwZ+nx2?Un^@-xM^Yi^ZC;d3Yt$*e9-)GOC8|&%yZPM8sySvP$@Da=1Jaf^b
zzPs-pliK~Z>AuLi*xlRmUN2CeSFz~cXVtG(w=Ao^WEdtMVyXLfGyTVl#r+eeO>49N
z|FiJOkz)r=UluksHT5`u;=rWyc8B|9trJY7KK}W9KKaRsiQB*KI=^9q!N#huS^NHc
zIt^-6et3BJ<C)Fp7iCXh_u+Fkljo!f^XK>H@4MOY^z?McNh)7nU*|VYJ9FUDQg7*P
zg=w2BzunncEGZ)sV=f^qDS7hS+uO!kT3x=gOcWV@{r>&=Zu$Mx$jF-qe(h^NcFid!
z<?=G$p6+gChN_AR0~?z;<@YMpZ*R{(f8oM~U8VZT$9f*}+yA++!_Br|&h}KheBF$H
z|NfOOF0a}<@87?FGL}Uu{c^TdcX_hbH0=<$wXW{-S#wD#DX->(4w2JVUVaIxJNjg;
zi>|H;y&lSOJ-6x1(N?SU^YfmboU9%g5z&!$c9x=&5|i3wPf#hRHU0Br4{c4&&YwSj
ze)#gmB_l(_s^o>jx^neTyUx$x;^htf-uh#1$=h3B+kX4q{ov^;+R~-PAsQ;6wMro*
zPu6kDv}x<~G&Mc<1qQ#AVp3IAJ<0o4qI34H0~d14&i{MVtsfV?HB0o@*VpU}0!}qX
zMNdxnAM2HFU+CO^uSoIr$H&KiUUZjF{QvK7>F&d&udZ|!78cI1D177_f3fs3%f`CD
zRo~v;7GJq?<pdQ@wr0jnI)@(?DCp|)zP`5h@P&oWmf6?VWZ&yurWg<xckk6<e)}_T
zZf;iB($ZRRHS6Kamz;_$IcCy*GL}vLc0XArtNTBT|NrZH)y;~f7dalS-G1*;u)l3<
zR~Ofv!sD_p>=PJvmA&MWm(LfOXWRXrU&f)P#%5d2&89<#oZj5sJ-z&XZTVtR*SI)2
zb-y_sQ?<jL7GGRYzrXIq-R1nZwq!E*x;6Lo2zz*VfYS4Zgo8{GI%1&ES-1YDBJV8I
z>}#M-@g|+(CnqNQczQnES^WG((N2#^e9I@Nrl#K6RjM7`)-KGjyX57e`$jvrF6>R+
z^Xt{>D;XvxQoVBwli9erxih!lepz;%FY|UznV5)3(YH4@zkK_)ti7Fme%-H^vyCcB
zovo*WVxU`G-_6yPwd(7u*2>S%6xGzk(zHK(U8tmUXJT(l33tpS^>>mc9IwrD8cwD-
z6%`q!ot^bHD!GP1NLYAh)z_>YF?v4pY$Su1`838m2n2DTd;Ix*(Z-Z=zMxO%4_~(z
zSikR=*1wPa^$ZN4-tyY$?e_`-?_3CX%gV}nZd?6rf#+nkitl&JFPd10?7plUAuzw!
zI8D3a;f~fFW_2?P^0ki~JN9Vh@?(kD*6e@0di_49v^2H)UAzI#>8GdZo;Z2Zad+8U
zgUU}SA=VwLyU!<Fo~RUZE315!VO7?Lgy{i2uf_WWmE95!xAETCmMc9?H@Yl)JE+~W
z;bzW`|Nnkp+?pMpGHuRr_WSeP3YW^tNpV`O<>^%^_)uc`Z}tp!hlCdw6gjxKoLpU5
z`DCq1LhlzBvi<ma=xI^x*R9px-?1|Md7EF~ygpy}jgRipRm`jfJ49ZX2z`l?<P+cc
z%YpG*T7-azM8iVocBj=>K~09^eX@^rZ#ykny3{dH<j=z5bPh#D+x<eK&*x5$ab}pL
zvO#;Ti2qkZMH3T|#Kc4m4UGdWoWcT<l0Uoogq$8U^V{vnGt=m53SAwhsHWEDxBPQ>
zdYQaM0Rvkz<3+=bD>hkAoD&*XUBg(fm6UXPViHe|c!%}79n4a_Y*VLB-4LO(y=;o&
zX``B6Hw}hWZ@2n?^8fxpfZ^PAje?z=`TYD6JogkjCruI(5f{Jz<+_8btLxoJh5c;;
zOmT5>7cx=;80Wm}7JFp0crD*|)pG^A@9tk|npM)o!Nb#X`>mUwAD_u2hl&Z;TetEZ
z=|7)TsL6G!MdCsFg#$q`txZie6%`c;cXkxMxVZTE`Dy+_QESC!o97>UKEJ*$Hb=lI
z;lY8%ijPOd10y4UcDuVxJaT1aFsS%>^(yOyZAy#T#e;9d9xR-ym#KP(OF;4!vnR)t
z>C>G9MP8IxN$|8qhYJ)I7DntU(KO4u)4?gMzG&}B@z`kdgXNN9FKnOOdRy1hprc|V
zbX{g2o9wr_7L1#3^2p1}_ehy?F|+afxa#+`b;IXfoJvMULWkS=_pdtl_Hn=cxzy9s
z9<IK+`l7BL-}kbNuCwmliRHT%PIP&jq{DP@pVgn0?#33edZ6B*-*VxH4<B-HbMG#-
zo@!h5rQu`>Xh>&c&dZ>Rtd9M6uCpE9-J*0Qygeb_Hj1qx>CXZVo|h6muU=*8L~ddc
z>t?-p@nX1YTbtYee}5moecOB9?l;fLlP5cPjg!vJh`4k07XQJ0RV>n9e>i)``$!9R
zKKnP%!`JudG~MV08eE`^E2bND=a%s~J+;hPrrF1)YKL!Hwyf>>8op<<&KvK3BEx-p
z&6>g;8Jllf)cz`|s;&-Rf4%tfGT-pOSIn0j2`MWx12v-+SwKyR<l{jrHMmZnyK1m}
z%dDHK&oeC3m!E!{=I6)v`}=!;&q+6Sm1aMC^5o73n<KpPZ)-jt6~DO9nO#IwH1W=k
z!iwT!JWrmd9ln0JS3sWEMwMMi_<PcY1&*Mmg^26HFE1|}=G@re_H&7gi%ZAK;N^#|
zUl*_b{_g08#P5keKRvaGkL+^LZ%oLSyyj&*O)s*^Z?0A1^K)}KI5-Y`dV2cerqt8Y
zd7pXvjeOK5pEz;ifw%tNmc7;AlfLbKpY(H6s`xg+53YfMf_<{qZLeNsv9PfvJv!1k
z!zk5jah@4FpNz)7f4{Q#eLN;@QTNAUUd1C$7kBr?si&u1$l7}1%$XxAgO@)ju@aP)
z?w)C!z9{|tyzS>7goT7mIdT5{^IfH{H{{$jTC!}}wYPtDS{g299O)2L{%|9?|E|&M
zU2XjGdVMmMho)+WKl*&${`kww%L_j}@#Iic@DyrlYBH$$k^vfS?C9>^ooRM|%ft8b
z@+y<&%{zCvo&Rv!=7ZO-i`V}8VtHjt=4HLt*Vpe~`pbW=Rq3kDmH+?!-BZz%R8nG6
z_3e%3z54&Ppy6QiuX55y`0n)9O}}>E@%y{G(o4?1n&SnnV?!KQtY``dWL>z3%L!ch
zcFaD|YgOk7s)sv{xp{he7DYu##psD|+O(<Q!2!lqO*?!&eSA{(*ZsAs|MT&9!Oj>^
zSTOV3G=Tb3qDOMw932^#`_J#|>FL>}`Bf#+Y_?(UEfbSne-%O<W2Be+&v(np(rOWy
zF0*Tu2G_ZHw%w}U(^lvndF$fp%9@pxRrhVpyZ8Hk`-vWT+p>SZy^XEy`U*F51|AuU
z0MR3FU2bp7Eqp$=+$m5bV{6ojO)=j&xw#MD*qEHJU7wLx?%2}O(&60Bw{g`fuFTBL
z0;{<bQYFvMHb1^5a<hP>q-KcYowSm7cOpf^#6Z1i4K1yv<;&F{J$jVaxwa?7@sHoD
z&oh*^^1}lI)Dqdg>!7$$!1c!=F`)vz6P7Gd(dc68KHBu;NlK|3s2jOwj}4!cNk{N9
zA4Z0h^z_Bm-{1ZCaF{<d@J?UT4BKk6vUhhP%YWDeSTFi{ull{BqN1bdQP#ZfBO#!1
z>vMCh55FyoH_E^Cwruf^9TNBJey?5Ca(iX#ij^xXcWl`3p=)x6=c6YlC$AF9Q+LcT
zkz!$CiTRlC#4*E1EtGTnWCbTDry~~@IxBh#r9`g#9lrXilEQ*A?Zm0K*98B3wR-)d
zb-Uj+-G1A)NTc+3qW=s7#%4C&pvgkpgO>}fxVv=Of&~q)udhG;@$qp`mw}O)E#brj
z#Z?k{?v4yQ-rQKUv-tTct{t)QlAzXDh-1vW<Q;NP@1E*z%FlH4m=v;p@vNw|Vh7gR
z232`;9?CI0f9}MIgtD@4NB=9^+REO%dGq=g4{>qv=}VU`HPqDPR4M%RC3DI0<?-7#
z?($+zIy=i$#;(S~S50{Do;?~Z3&K{XIyf*`m%KP2X`J@q%gf9AcQXC|egA*ahX)6F
zxVaa{tzRzCBqt}Ab8Cy{<42Dy($C3En=(aZwdsY18CIoQ%*@Q34RLXCZ!RokX6KVR
z5x2L>P)DbSVa4T_H@0Sn%UKq+gx|i^BX2*?ZSh1W4yj(Zve(yonc4ZC+%3O<cEJJ#
zCeSEMZ28@zU%r%V-I~F1W|rydcPnKL5*W7U+&r{um6leQ)ArLx&z$i&H_No!cedG5
zfu@HKANqKD{=9l>woxiqsg<m)jm?h-&HP4+ij8{HySo-$cv@trtJ|x;|4-3ef!|+V
zF5c&qXC`f)x8!2RlIhdML4BCbH+|YKA7wgSDR;`mSb2ZbRWtUve(KlPL>@NFy%oT5
z@VH#{8*%M-v-9^YyqK|M`EvE;zO&uBm-g^2@2-57C3ni?^Oc)kQE&Zj<(RFD*a#X#
zzVfo9=Jnd`A&z%+bi_^@JGb#H6liK@=YKZSI6b4>VrNyo-0?HkClcSkef(kPZ_Cn9
zsn5D$w{p$S%{K36kPs6)7Jp0e*`ZA9KcDCS_gQ`Q)T+;AdiSQD4V14rpIDrAdhW+i
ztMk*MUzS)|*8i*FQoOM#)q9?8^|rw7MHk&9BO@c{%h*<lur)LG+kTVqS!VFY$M~`Q
zY(M4QSGc^l3af_l<=6%FoID+zQ0hIy;Gyf0qem6(?d7Al=j~0}`SIgNo3b|&K5D}A
zs^3+<_*%8bSL;yyw&xFWcFIosy!C0GMM%fZ`*Yk%c|ZR7@ewo(;^)Wr=<(yL8$PE6
z1OzawzRG29Z(s8I8m}4qMkPb}NdnWKaPBEF`lM6##yXPC;lV+6`4#~tap%kPCrzBl
z*nYTinr^g`i3y9|bne?hUW%u;s=tUm620CvD^Ao;Jk)ub3Xg;V1B2AxH>=&WIaXig
zat(a&@@40R3uzh}+ZQj{^lZ~>j|09+*K=AguU(LQ+;2jv<n#0M_b2UCRaF&mI&lBK
zd|X^yfu=*<Ox_3nr&Z_Vv8slaF*MBI|NrPTZ_y)X8&o_FJuO=JtHzXxC+fu(p$={T
z$;MS#3#YPnb)9nxoHF0nUb^=f_tR_VW(zP~$X@?s*{v{-)hqu>>(4p$>h<f@T#wQ&
ztcf(PsH$4DXc3d9{T~MVX12Sxeq9fpqQaoa(CQ-G%zmp~+L39tS#HxJ4Gw<({Yg6)
zE?hW4h4bdkNDW=x)^?o>ulpD{u1r&p{joz-X-lWv#D#VNBCPFvSD!80RsMb**P}E6
zIk~<C3lu^^Lla+LTe~4DSK{_=)?Y5y&&^%4!78zI$HV*!NtYg6>&Sc7d$^rH`FNk~
zhmRi}V`A=zo_>36tuzx8(}by0TVr>ZIZiVD5q$pH3z3T~e9MEP^LnKj?V@b%?Pi_z
z^X0@@v$}F`Z*yFJ`Qg9c@57xB%s%>h{eC|N9xkp&+wa$T2Q9q&@X@@-OJlZ~PtWET
zGq|6mDr)ZS?QL1|B7iC3c%SS~@5j=~$NN+n%<}Kev9z>Q5e<uyy;HKJ!~6T3hqszp
z*KDy|sgWlpCbr3Uwi(NThlkr&S9Z+y^z`)nwD<cxZ_h~*LPCdBy{8$N>-U#czxCYd
zx4b(vG}On->(OC;dmny&{$Ia-75)75^v~9!-KDSH6j^-Lgu~ZF9DMXB>6(R1$<Dha
z7IW9ETlehS+uJv{=f^WGIGOUOPu5y$uY%NHi@d5TD|O#lEkAx#R8&_l4qoo};?`Ha
zEqRxvp08d#amtjI#qRw|#>T>Sc6KxDYOUhxem;%gT77+8>>P_iB~Sz9zyXJn7dHfL
ztG|Id(WkPmw?4YC(D}sa)6EAH4phJ2+y3$K@ztM=rI~i_+zFa~)@)J8Vm@-(F8B7f
zr_avLuD>i?^XiJ`x0jcnr=MmyFk^<qyPKPzPpb^Q6V!EYU#+!y&W(ni9-ff!aOc%m
z7iC^v_Tut#{x*L3z7HQh+)sUfJ-+^|ZuGVXS5^jZxS4Yy!zAO@7R_JZ-}ehDyRG;g
zY+7>a^y%oQ&z@~sv0_Es{5zXAZECEn{C$`2DFXw8JZLRIrH-DSUhv*Ei%>yP?jQNT
YUQe!cnBB}^U|?YIboFyt=akR{09ic(9RL6T

literal 0
HcmV?d00001

-- 
GitLab


From b19977682da1b798442fae6a7db282acd2e51c62 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 16:28:39 +0000
Subject: [PATCH 091/229] Device component - IETF L2VPN Driver:

- backup WORK IN PROGRESS
---
 src/device/service/drivers/__init__.py        |   9 +
 .../drivers/ietf_l2vpn/IetfL2VpnDriver.py     | 118 +++-
 .../service/drivers/ietf_l2vpn/MockOSM.py     |  62 ++
 .../service/drivers/ietf_l2vpn/Tools.py       | 184 ++++++
 .../ietf_l2vpn/WimconnectorIETFL2VPN.py       | 543 ++++++++++++++++++
 .../service/drivers/ietf_l2vpn/__init__.py    |  14 +
 .../drivers/ietf_l2vpn/acknowledgements.txt   |   3 +
 .../service/drivers/ietf_l2vpn/sdnconn.py     | 242 ++++++++
 8 files changed, 1172 insertions(+), 3 deletions(-)
 create mode 100644 src/device/service/drivers/ietf_l2vpn/MockOSM.py
 create mode 100644 src/device/service/drivers/ietf_l2vpn/Tools.py
 create mode 100644 src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
 create mode 100644 src/device/service/drivers/ietf_l2vpn/acknowledgements.txt
 create mode 100644 src/device/service/drivers/ietf_l2vpn/sdnconn.py

diff --git a/src/device/service/drivers/__init__.py b/src/device/service/drivers/__init__.py
index 469abcad3..b3b485a47 100644
--- a/src/device/service/drivers/__init__.py
+++ b/src/device/service/drivers/__init__.py
@@ -74,6 +74,15 @@ DRIVERS.append(
         #}
     ]))
 
+from .ietf_l2vpn.IetfL2VpnDriver import IetfL2VpnDriver # pylint: disable=wrong-import-position
+DRIVERS.append(
+    (IetfL2VpnDriver, [
+        {
+            FilterFieldEnum.DEVICE_TYPE: DeviceTypeEnum.TERAFLOWSDN_CONTROLLER,
+            FilterFieldEnum.DRIVER: DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN,
+        }
+    ]))
+
 if LOAD_ALL_DEVICE_DRIVERS:
     from .openconfig.OpenConfigDriver import OpenConfigDriver # pylint: disable=wrong-import-position
     DRIVERS.append(
diff --git a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
index 1b1217636..3823f569b 100644
--- a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
+++ b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
@@ -12,6 +12,118 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-class IetfL2VpnDriver:
-    def __init__(self) -> None:
-        pass
+import logging, requests, threading
+from requests.auth import HTTPBasicAuth
+from typing import Any, Iterator, List, Optional, Tuple, Union
+from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
+from common.type_checkers.Checkers import chk_string, chk_type
+from device.service.driver_api._Driver import _Driver
+from . import ALL_RESOURCE_KEYS
+from .Tools import create_connectivity_service, find_key, config_getter, delete_connectivity_service
+
+LOGGER = logging.getLogger(__name__)
+
+METRICS_POOL = MetricsPool('Device', 'Driver', labels={'driver': 'ietf_l2vpn'})
+
+class IetfL2VpnDriver(_Driver):
+    def __init__(self, address: str, port: int, **settings) -> None:    # pylint: disable=super-init-not-called
+        self.__lock = threading.Lock()
+        self.__started = threading.Event()
+        self.__terminate = threading.Event()
+        username = settings.get('username')
+        password = settings.get('password')
+        self.__auth = HTTPBasicAuth(username, password) if username is not None and password is not None else None
+        scheme = settings.get('scheme', 'http')
+        self.__tapi_root = '{:s}://{:s}:{:d}'.format(scheme, address, int(port))
+        self.__timeout = int(settings.get('timeout', 120))
+
+    def Connect(self) -> bool:
+        url = self.__tapi_root + '/restconf/data/tapi-common:context'
+        with self.__lock:
+            if self.__started.is_set(): return True
+            try:
+                requests.get(url, timeout=self.__timeout, verify=False, auth=self.__auth)
+            except requests.exceptions.Timeout:
+                LOGGER.exception('Timeout connecting {:s}'.format(str(self.__tapi_root)))
+                return False
+            except Exception:  # pylint: disable=broad-except
+                LOGGER.exception('Exception connecting {:s}'.format(str(self.__tapi_root)))
+                return False
+            else:
+                self.__started.set()
+                return True
+
+    def Disconnect(self) -> bool:
+        with self.__lock:
+            self.__terminate.set()
+            return True
+
+    @metered_subclass_method(METRICS_POOL)
+    def GetInitialConfig(self) -> List[Tuple[str, Any]]:
+        with self.__lock:
+            return []
+
+    @metered_subclass_method(METRICS_POOL)
+    def GetConfig(self, resource_keys : List[str] = []) -> List[Tuple[str, Union[Any, None, Exception]]]:
+        chk_type('resources', resource_keys, list)
+        results = []
+        with self.__lock:
+            if len(resource_keys) == 0: resource_keys = ALL_RESOURCE_KEYS
+            for i, resource_key in enumerate(resource_keys):
+                str_resource_name = 'resource_key[#{:d}]'.format(i)
+                chk_string(str_resource_name, resource_key, allow_empty=False)
+                results.extend(config_getter(
+                    self.__tapi_root, resource_key, timeout=self.__timeout, auth=self.__auth))
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def SetConfig(self, resources: List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        results = []
+        if len(resources) == 0:
+            return results
+        with self.__lock:
+            for resource in resources:
+                LOGGER.info('resource = {:s}'.format(str(resource)))
+
+                input_sip = find_key(resource, 'input_sip')
+                output_sip = find_key(resource, 'output_sip')
+                uuid = find_key(resource, 'uuid')
+                capacity_value = find_key(resource, 'capacity_value')
+                capacity_unit = find_key(resource, 'capacity_unit')
+                layer_protocol_name = find_key(resource, 'layer_protocol_name')
+                layer_protocol_qualifier = find_key(resource, 'layer_protocol_qualifier')
+                direction = find_key(resource, 'direction')
+
+                data = create_connectivity_service(
+                    self.__tapi_root, uuid, input_sip, output_sip, direction, capacity_value, capacity_unit,
+                    layer_protocol_name, layer_protocol_qualifier, timeout=self.__timeout, auth=self.__auth)
+                results.extend(data)
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def DeleteConfig(self, resources: List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        results = []
+        if len(resources) == 0: return results
+        with self.__lock:
+            for resource in resources:
+                LOGGER.info('resource = {:s}'.format(str(resource)))
+                uuid = find_key(resource, 'uuid')
+                results.extend(delete_connectivity_service(
+                    self.__tapi_root, uuid, timeout=self.__timeout, auth=self.__auth))
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def SubscribeState(self, subscriptions : List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]:
+        # TODO: TAPI does not support monitoring by now
+        return [False for _ in subscriptions]
+
+    @metered_subclass_method(METRICS_POOL)
+    def UnsubscribeState(self, subscriptions : List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]:
+        # TODO: TAPI does not support monitoring by now
+        return [False for _ in subscriptions]
+
+    def GetState(
+        self, blocking=False, terminate : Optional[threading.Event] = None
+    ) -> Iterator[Tuple[float, str, Any]]:
+        # TODO: TAPI does not support monitoring by now
+        return []
diff --git a/src/device/service/drivers/ietf_l2vpn/MockOSM.py b/src/device/service/drivers/ietf_l2vpn/MockOSM.py
new file mode 100644
index 000000000..338db0e19
--- /dev/null
+++ b/src/device/service/drivers/ietf_l2vpn/MockOSM.py
@@ -0,0 +1,62 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+from .WimconnectorIETFL2VPN import WimconnectorIETFL2VPN
+
+LOGGER = logging.getLogger(__name__)
+
+class MockOSM:
+    def __init__(self, url, mapping, username, password):
+        wim = {'wim_url': url}
+        wim_account = {'user': username, 'password': password}
+        config = {'mapping_not_needed': False, 'service_endpoint_mapping': mapping}
+        self.wim = WimconnectorIETFL2VPN(wim, wim_account, config=config)
+        self.conn_info = {} # internal database emulating OSM storage provided to WIM Connectors
+
+    def create_connectivity_service(self, service_type, connection_points):
+        LOGGER.info('[create_connectivity_service] service_type={:s}'.format(str(service_type)))
+        LOGGER.info('[create_connectivity_service] connection_points={:s}'.format(str(connection_points)))
+        self.wim.check_credentials()
+        result = self.wim.create_connectivity_service(service_type, connection_points)
+        LOGGER.info('[create_connectivity_service] result={:s}'.format(str(result)))
+        service_uuid, conn_info = result
+        self.conn_info[service_uuid] = conn_info
+        return service_uuid
+
+    def get_connectivity_service_status(self, service_uuid):
+        LOGGER.info('[get_connectivity_service] service_uuid={:s}'.format(str(service_uuid)))
+        conn_info = self.conn_info.get(service_uuid)
+        if conn_info is None: raise Exception('ServiceId({:s}) not found'.format(str(service_uuid)))
+        LOGGER.info('[get_connectivity_service] conn_info={:s}'.format(str(conn_info)))
+        self.wim.check_credentials()
+        result = self.wim.get_connectivity_service_status(service_uuid, conn_info=conn_info)
+        LOGGER.info('[get_connectivity_service] result={:s}'.format(str(result)))
+        return result
+
+    def edit_connectivity_service(self, service_uuid, connection_points):
+        LOGGER.info('[edit_connectivity_service] service_uuid={:s}'.format(str(service_uuid)))
+        LOGGER.info('[edit_connectivity_service] connection_points={:s}'.format(str(connection_points)))
+        conn_info = self.conn_info.get(service_uuid)
+        if conn_info is None: raise Exception('ServiceId({:s}) not found'.format(str(service_uuid)))
+        LOGGER.info('[edit_connectivity_service] conn_info={:s}'.format(str(conn_info)))
+        self.wim.edit_connectivity_service(service_uuid, conn_info=conn_info, connection_points=connection_points)
+
+    def delete_connectivity_service(self, service_uuid):
+        LOGGER.info('[delete_connectivity_service] service_uuid={:s}'.format(str(service_uuid)))
+        conn_info = self.conn_info.get(service_uuid)
+        if conn_info is None: raise Exception('ServiceId({:s}) not found'.format(str(service_uuid)))
+        LOGGER.info('[delete_connectivity_service] conn_info={:s}'.format(str(conn_info)))
+        self.wim.check_credentials()
+        self.wim.delete_connectivity_service(service_uuid, conn_info=conn_info)
diff --git a/src/device/service/drivers/ietf_l2vpn/Tools.py b/src/device/service/drivers/ietf_l2vpn/Tools.py
new file mode 100644
index 000000000..8188c77df
--- /dev/null
+++ b/src/device/service/drivers/ietf_l2vpn/Tools.py
@@ -0,0 +1,184 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json, logging, operator, requests
+from requests.auth import HTTPBasicAuth
+from typing import Dict, Optional
+from device.service.driver_api._Driver import RESOURCE_ENDPOINTS
+
+LOGGER = logging.getLogger(__name__)
+
+HTTP_OK_CODES = {
+    200,    # OK
+    201,    # Created
+    202,    # Accepted
+    204,    # No Content
+}
+
+def find_key(resource, key):
+    return json.loads(resource[1])[key]
+
+
+def config_getter(
+    root_url : str, resource_key : str, auth : Optional[HTTPBasicAuth] = None, timeout : Optional[int] = None
+):
+    url = '{:s}/restconf/data/tapi-common:context'.format(root_url)
+    result = []
+    try:
+        response = requests.get(url, timeout=timeout, verify=False, auth=auth)
+    except requests.exceptions.Timeout:
+        LOGGER.exception('Timeout connecting {:s}'.format(url))
+        return result
+    except Exception as e:  # pylint: disable=broad-except
+        LOGGER.exception('Exception retrieving {:s}'.format(resource_key))
+        result.append((resource_key, e))
+        return result
+
+    try:
+        context = json.loads(response.content)
+    except Exception as e:  # pylint: disable=broad-except
+        LOGGER.warning('Unable to decode reply: {:s}'.format(str(response.content)))
+        result.append((resource_key, e))
+        return result
+
+    if resource_key != RESOURCE_ENDPOINTS: return result
+
+    if 'tapi-common:context' in context:
+        context = context['tapi-common:context']
+    elif 'context' in context:
+        context = context['context']
+
+    for sip in context['service-interface-point']:
+        layer_protocol_name = sip.get('layer-protocol-name', '?')
+        supportable_spectrum = sip.get('tapi-photonic-media:media-channel-service-interface-point-spec', {})
+        supportable_spectrum = supportable_spectrum.get('mc-pool', {})
+        supportable_spectrum = supportable_spectrum.get('supportable-spectrum', [])
+        supportable_spectrum = supportable_spectrum[0] if len(supportable_spectrum) == 1 else {}
+        grid_type = supportable_spectrum.get('frequency-constraint', {}).get('grid-type')
+        granularity = supportable_spectrum.get('frequency-constraint', {}).get('adjustment-granularity')
+        direction = sip.get('direction', '?')
+        endpoint_type = [layer_protocol_name, grid_type, granularity, direction]
+        str_endpoint_type = ':'.join(filter(lambda i: operator.is_not(i, None), endpoint_type))
+        endpoint_url = '/endpoints/endpoint[{:s}]'.format(sip['uuid'])
+        endpoint_data = {'uuid': sip['uuid'], 'type': str_endpoint_type}
+        result.append((endpoint_url, endpoint_data))
+
+    return result
+
+def create_connectivity_service(
+    root_url, uuid, input_sip, output_sip, direction, capacity_value, capacity_unit, layer_protocol_name,
+    layer_protocol_qualifier,
+    auth : Optional[HTTPBasicAuth] = None, timeout : Optional[int] = None
+):
+
+    url = '{:s}/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context'.format(root_url)
+    headers = {'content-type': 'application/json'}
+    data = {
+        'tapi-connectivity:connectivity-service': [
+            {
+                'uuid': uuid,
+                'connectivity-constraint': {
+                    'requested-capacity': {
+                        'total-size': {
+                            'value': capacity_value,
+                            'unit': capacity_unit
+                        }
+                    },
+                    'connectivity-direction': direction
+                },
+                'end-point': [
+                    {
+                        'service-interface-point': {
+                            'service-interface-point-uuid': input_sip
+                        },
+                        'layer-protocol-name': layer_protocol_name,
+                        'layer-protocol-qualifier': layer_protocol_qualifier,
+                        'local-id': input_sip
+                    },
+                    {
+                        'service-interface-point': {
+                            'service-interface-point-uuid': output_sip
+                        },
+                        'layer-protocol-name': layer_protocol_name,
+                        'layer-protocol-qualifier': layer_protocol_qualifier,
+                        'local-id': output_sip
+                    }
+                ]
+            }
+        ]
+    }
+    results = []
+    try:
+        LOGGER.info('Connectivity service {:s}: {:s}'.format(str(uuid), str(data)))
+        response = requests.post(
+            url=url, data=json.dumps(data), timeout=timeout, headers=headers, verify=False, auth=auth)
+        LOGGER.info('TAPI response: {:s}'.format(str(response)))
+    except Exception as e:  # pylint: disable=broad-except
+        LOGGER.exception('Exception creating ConnectivityService(uuid={:s}, data={:s})'.format(str(uuid), str(data)))
+        results.append(e)
+    else:
+        if response.status_code not in HTTP_OK_CODES:
+            msg = 'Could not create ConnectivityService(uuid={:s}, data={:s}). status_code={:s} reply={:s}'
+            LOGGER.error(msg.format(str(uuid), str(data), str(response.status_code), str(response)))
+        results.append(response.status_code in HTTP_OK_CODES)
+    return results
+
+def delete_connectivity_service(root_url, uuid, auth : Optional[HTTPBasicAuth] = None, timeout : Optional[int] = None):
+    url = '{:s}/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context/connectivity-service={:s}'
+    url = url.format(root_url, uuid)
+    results = []
+    try:
+        response = requests.delete(url=url, timeout=timeout, verify=False, auth=auth)
+    except Exception as e:  # pylint: disable=broad-except
+        LOGGER.exception('Exception deleting ConnectivityService(uuid={:s})'.format(str(uuid)))
+        results.append(e)
+    else:
+        if response.status_code not in HTTP_OK_CODES:
+            msg = 'Could not delete ConnectivityService(uuid={:s}). status_code={:s} reply={:s}'
+            LOGGER.error(msg.format(str(uuid), str(response.status_code), str(response)))
+        results.append(response.status_code in HTTP_OK_CODES)
+    return results
+
+def compose_service_endpoint_id(site_id : str, endpoint_id : Dict):
+    device_uuid = endpoint_id['device_id']['device_uuid']['uuid']
+    endpoint_uuid = endpoint_id['endpoint_uuid']['uuid']
+    return ':'.join([site_id, device_uuid, endpoint_uuid])
+
+def wim_mapping(site_id, ce_endpoint_id, pe_device_id : Optional[Dict] = None, priority=None, redundant=[]):
+    ce_device_uuid = ce_endpoint_id['device_id']['device_uuid']['uuid']
+    ce_endpoint_uuid = ce_endpoint_id['endpoint_uuid']['uuid']
+    service_endpoint_id = compose_service_endpoint_id(site_id, ce_endpoint_id)
+    if pe_device_id is None:
+        bearer = '{:s}:{:s}'.format(ce_device_uuid, ce_endpoint_uuid)
+    else:
+        pe_device_uuid = pe_device_id['device_uuid']['uuid']
+        bearer = '{:s}:{:s}'.format(ce_device_uuid, pe_device_uuid)
+    mapping = {
+        'service_endpoint_id': service_endpoint_id,
+        'datacenter_id': site_id, 'device_id': ce_device_uuid, 'device_interface_id': ce_endpoint_uuid,
+        'service_mapping_info': {
+            'site-id': site_id,
+            'bearer': {'bearer-reference': bearer},
+        }
+    }
+    if priority is not None: mapping['service_mapping_info']['priority'] = priority
+    if len(redundant) > 0: mapping['service_mapping_info']['redundant'] = redundant
+    return service_endpoint_id, mapping
+
+def connection_point(service_endpoint_id : str, encapsulation_type : str, vlan_id : int):
+    return {
+        'service_endpoint_id': service_endpoint_id,
+        'service_endpoint_encapsulation_type': encapsulation_type,
+        'service_endpoint_encapsulation_info': {'vlan': vlan_id}
+    }
diff --git a/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py b/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
new file mode 100644
index 000000000..aa4ca045f
--- /dev/null
+++ b/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
@@ -0,0 +1,543 @@
+# -*- coding: utf-8 -*-
+##
+# Copyright 2018 Telefonica
+# All Rights Reserved.
+#
+# Contributors: Oscar Gonzalez de Dios, Manuel Lopez Bravo, Guillermo Pajares Martin
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# This work has been performed in the context of the Metro-Haul project -
+# funded by the European Commission under Grant number 761727 through the
+# Horizon 2020 program.
+##
+"""The SDN/WIM connector is responsible for establishing wide area network
+connectivity.
+
+This SDN/WIM connector implements the standard IETF RFC 8466 "A YANG Data
+ Model for Layer 2 Virtual Private Network (L2VPN) Service Delivery"
+
+It receives the endpoints and the necessary details to request
+the Layer 2 service.
+"""
+import requests
+import uuid
+import logging
+import copy
+#from osm_ro_plugin.sdnconn import SdnConnectorBase, SdnConnectorError
+from .sdnconn import SdnConnectorBase, SdnConnectorError
+
+"""Check layer where we move it"""
+
+
+class WimconnectorIETFL2VPN(SdnConnectorBase):
+    def __init__(self, wim, wim_account, config=None, logger=None):
+        """IETF L2VPN WIM connector
+
+        Arguments: (To be completed)
+            wim (dict): WIM record, as stored in the database
+            wim_account (dict): WIM account record, as stored in the database
+        """
+        self.logger = logging.getLogger("ro.sdn.ietfl2vpn")
+        super().__init__(wim, wim_account, config, logger)
+        self.headers = {"Content-Type": "application/json"}
+        self.mappings = {
+            m["service_endpoint_id"]: m for m in self.service_endpoint_mapping
+        }
+        self.user = wim_account.get("user")
+        self.passwd = wim_account.get("password")           # replace "passwordd" -> "password"
+
+        if self.user and self.passwd is not None:
+            self.auth = (self.user, self.passwd)
+        else:
+            self.auth = None
+
+        self.logger.info("IETFL2VPN Connector Initialized.")
+
+    def check_credentials(self):
+        endpoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format(
+            self.wim["wim_url"]
+        )
+
+        try:
+            response = requests.get(endpoint, auth=self.auth)
+            http_code = response.status_code
+        except requests.exceptions.RequestException as e:
+            raise SdnConnectorError(e.response, http_code=503)
+
+        if http_code != 200:
+            raise SdnConnectorError("Failed while authenticating", http_code=http_code)
+
+        self.logger.info("Credentials checked")
+
+    def get_connectivity_service_status(self, service_uuid, conn_info=None):
+        """Monitor the status of the connectivity service stablished
+
+        Arguments:
+            service_uuid: Connectivity service unique identifier
+
+        Returns:
+            Examples::
+                {'sdn_status': 'ACTIVE'}
+                {'sdn_status': 'INACTIVE'}
+                {'sdn_status': 'DOWN'}
+                {'sdn_status': 'ERROR'}
+        """
+        try:
+            self.logger.info("Sending get connectivity service stuatus")
+            servicepoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services/vpn-service={}/".format(
+                self.wim["wim_url"], service_uuid
+            )
+            response = requests.get(servicepoint, auth=self.auth)
+            self.logger.warning('response.status_code={:s}'.format(str(response.status_code)))
+            if response.status_code != requests.codes.ok:
+                raise SdnConnectorError(
+                    "Unable to obtain connectivity servcice status",
+                    http_code=response.status_code,
+                )
+
+            service_status = {"sdn_status": "ACTIVE"}
+
+            return service_status
+        except requests.exceptions.ConnectionError:
+            raise SdnConnectorError("Request Timeout", http_code=408)
+
+    def search_mapp(self, connection_point):
+        id = connection_point["service_endpoint_id"]
+        if id not in self.mappings:
+            raise SdnConnectorError("Endpoint {} not located".format(str(id)))
+        else:
+            return self.mappings[id]
+
+    def create_connectivity_service(self, service_type, connection_points, **kwargs):
+        """Stablish WAN connectivity between the endpoints
+
+        Arguments:
+            service_type (str): ``ELINE`` (L2), ``ELAN`` (L2), ``ETREE`` (L2),
+                ``L3``.
+            connection_points (list): each point corresponds to
+                an entry point from the DC to the transport network. One
+                connection point serves to identify the specific access and
+                some other service parameters, such as encapsulation type.
+                Represented by a dict as follows::
+
+                    {
+                      "service_endpoint_id": ..., (str[uuid])
+                      "service_endpoint_encapsulation_type": ...,
+                           (enum: none, dot1q, ...)
+                      "service_endpoint_encapsulation_info": {
+                        ... (dict)
+                        "vlan": ..., (int, present if encapsulation is dot1q)
+                        "vni": ... (int, present if encapsulation is vxlan),
+                        "peers": [(ipv4_1), (ipv4_2)]
+                            (present if encapsulation is vxlan)
+                      }
+                    }
+
+              The service endpoint ID should be previously informed to the WIM
+              engine in the RO when the WIM port mapping is registered.
+
+        Keyword Arguments:
+            bandwidth (int): value in kilobytes
+            latency (int): value in milliseconds
+
+        Other QoS might be passed as keyword arguments.
+
+        Returns:
+            tuple: ``(service_id, conn_info)`` containing:
+               - *service_uuid* (str): UUID of the established connectivity
+                  service
+               - *conn_info* (dict or None): Information to be stored at the
+                 database (or ``None``). This information will be provided to
+                 the :meth:`~.edit_connectivity_service` and :obj:`~.delete`.
+                 **MUST** be JSON/YAML-serializable (plain data structures).
+
+        Raises:
+            SdnConnectorException: In case of error.
+        """
+        SETTINGS = {    # min_endpoints, max_endpoints, vpn_service_type
+            'ELINE': (2,    2, 'vpws'), # Virtual Private Wire Service
+            'ELAN' : (2, None, 'vpls'), # Virtual Private LAN  Service
+        }
+        settings = SETTINGS.get(service_type)
+        if settings is None: raise NotImplementedError('Unsupported service_type({:s})'.format(str(service_type)))
+        min_endpoints, max_endpoints, vpn_service_type = settings
+
+        if max_endpoints is not None and len(connection_points) > max_endpoints:
+            msg = "Connections between more than {:d} endpoints are not supported for service_type {:s}"
+            raise SdnConnectorError(msg.format(max_endpoints, service_type))
+
+        if min_endpoints is not None and len(connection_points) < min_endpoints:
+            msg = "Connections must be of at least {:d} endpoints for service_type {:s}"
+            raise SdnConnectorError(msg.format(min_endpoints, service_type))
+
+        """First step, create the vpn service"""
+        uuid_l2vpn = str(uuid.uuid4())
+        vpn_service = {}
+        vpn_service["vpn-id"] = uuid_l2vpn
+        vpn_service["vpn-svc-type"] = vpn_service_type
+        vpn_service["svc-topo"] = "any-to-any"
+        vpn_service["customer-name"] = "osm"
+        vpn_service_list = []
+        vpn_service_list.append(vpn_service)
+        vpn_service_l = {"ietf-l2vpn-svc:vpn-service": vpn_service_list}
+        response_service_creation = None
+        conn_info = []
+        self.logger.info("Sending vpn-service :{}".format(vpn_service_l))
+
+        try:
+            endpoint_service_creation = (
+                "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format(
+                    self.wim["wim_url"]
+                )
+            )
+            response_service_creation = requests.post(
+                endpoint_service_creation,
+                headers=self.headers,
+                json=vpn_service_l,
+                auth=self.auth,
+            )
+        except requests.exceptions.ConnectionError:
+            raise SdnConnectorError(
+                "Request to create service Timeout", http_code=408
+            )
+
+        if response_service_creation.status_code == 409:
+            raise SdnConnectorError(
+                "Service already exists",
+                http_code=response_service_creation.status_code,
+            )
+        elif response_service_creation.status_code != requests.codes.created:
+            raise SdnConnectorError(
+                "Request to create service not accepted",
+                http_code=response_service_creation.status_code,
+            )
+
+        self.logger.info('connection_points = {:s}'.format(str(connection_points)))
+
+        # Check if protected paths are requested
+        extended_connection_points = []
+        for connection_point in connection_points:
+            extended_connection_points.append(connection_point)
+
+            connection_point_wan_info = self.search_mapp(connection_point)
+            service_mapping_info = connection_point_wan_info.get('service_mapping_info', {})
+            redundant_service_endpoint_ids = service_mapping_info.get('redundant')
+
+            if redundant_service_endpoint_ids is None: continue
+            if len(redundant_service_endpoint_ids) == 0: continue
+
+            for redundant_service_endpoint_id in redundant_service_endpoint_ids:
+                redundant_connection_point = copy.deepcopy(connection_point)
+                redundant_connection_point['service_endpoint_id'] = redundant_service_endpoint_id
+                extended_connection_points.append(redundant_connection_point)
+
+        self.logger.info('extended_connection_points = {:s}'.format(str(extended_connection_points)))
+
+        """Second step, create the connections and vpn attachments"""
+        for connection_point in extended_connection_points:
+            connection_point_wan_info = self.search_mapp(connection_point)
+            site_network_access = {}
+            connection = {}
+
+            if connection_point["service_endpoint_encapsulation_type"] != "none":
+                if (
+                    connection_point["service_endpoint_encapsulation_type"]
+                    == "dot1q"
+                ):
+                    """The connection is a VLAN"""
+                    connection["encapsulation-type"] = "dot1q-vlan-tagged"
+                    tagged = {}
+                    tagged_interf = {}
+                    service_endpoint_encapsulation_info = connection_point[
+                        "service_endpoint_encapsulation_info"
+                    ]
+
+                    if service_endpoint_encapsulation_info["vlan"] is None:
+                        raise SdnConnectorError("VLAN must be provided")
+
+                    tagged_interf["cvlan-id"] = service_endpoint_encapsulation_info[
+                        "vlan"
+                    ]
+                    tagged["dot1q-vlan-tagged"] = tagged_interf
+                    connection["tagged-interface"] = tagged
+                else:
+                    raise NotImplementedError("Encapsulation type not implemented")
+
+            site_network_access["connection"] = connection
+            self.logger.info("Sending connection:{}".format(connection))
+            vpn_attach = {}
+            vpn_attach["vpn-id"] = uuid_l2vpn
+            vpn_attach["site-role"] = vpn_service["svc-topo"] + "-role"
+            site_network_access["vpn-attachment"] = vpn_attach
+            self.logger.info("Sending vpn-attachement :{}".format(vpn_attach))
+            uuid_sna = str(uuid.uuid4())
+            site_network_access["network-access-id"] = uuid_sna
+            site_network_access["bearer"] = connection_point_wan_info[
+                "service_mapping_info"
+            ]["bearer"]
+
+            access_priority = connection_point_wan_info["service_mapping_info"].get("priority")
+            if access_priority is not None:
+                availability = {}
+                availability["access-priority"] = access_priority
+                availability["single-active"] = [None]
+                site_network_access["availability"] = availability
+
+                constraint = {}
+                constraint['constraint-type'] = 'end-to-end-diverse'
+                constraint['target'] = {'all-other-accesses': [None]}
+
+                access_diversity = {}
+                access_diversity['constraints'] = {'constraint': []}
+                access_diversity['constraints']['constraint'].append(constraint)
+                site_network_access["access-diversity"] = access_diversity
+
+            site_network_accesses = {}
+            site_network_access_list = []
+            site_network_access_list.append(site_network_access)
+            site_network_accesses[
+                "ietf-l2vpn-svc:site-network-access"
+            ] = site_network_access_list
+            conn_info_d = {}
+            conn_info_d["site"] = connection_point_wan_info["service_mapping_info"][
+                "site-id"
+            ]
+            conn_info_d["site-network-access-id"] = site_network_access[
+                "network-access-id"
+            ]
+            conn_info_d["mapping"] = None
+            conn_info.append(conn_info_d)
+
+            try:
+                endpoint_site_network_access_creation = (
+                    "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/"
+                    "sites/site={}/site-network-accesses/".format(
+                        self.wim["wim_url"],
+                        connection_point_wan_info["service_mapping_info"][
+                            "site-id"
+                        ],
+                    )
+                )
+                response_endpoint_site_network_access_creation = requests.post(
+                    endpoint_site_network_access_creation,
+                    headers=self.headers,
+                    json=site_network_accesses,
+                    auth=self.auth,
+                )
+
+                if (
+                    response_endpoint_site_network_access_creation.status_code
+                    == 409
+                ):
+                    self.delete_connectivity_service(vpn_service["vpn-id"])
+
+                    raise SdnConnectorError(
+                        "Site_Network_Access with ID '{}' already exists".format(
+                            site_network_access["network-access-id"]
+                        ),
+                        http_code=response_endpoint_site_network_access_creation.status_code,
+                    )
+                elif (
+                    response_endpoint_site_network_access_creation.status_code
+                    == 400
+                ):
+                    self.delete_connectivity_service(vpn_service["vpn-id"])
+
+                    raise SdnConnectorError(
+                        "Site {} does not exist".format(
+                            connection_point_wan_info["service_mapping_info"][
+                                "site-id"
+                            ]
+                        ),
+                        http_code=response_endpoint_site_network_access_creation.status_code,
+                    )
+                elif (
+                    response_endpoint_site_network_access_creation.status_code
+                    != requests.codes.created
+                    and response_endpoint_site_network_access_creation.status_code
+                    != requests.codes.no_content
+                ):
+                    self.delete_connectivity_service(vpn_service["vpn-id"])
+
+                    raise SdnConnectorError(
+                        "Request not accepted",
+                        http_code=response_endpoint_site_network_access_creation.status_code,
+                    )
+            except requests.exceptions.ConnectionError:
+                self.delete_connectivity_service(vpn_service["vpn-id"])
+
+                raise SdnConnectorError("Request Timeout", http_code=408)
+
+        return uuid_l2vpn, conn_info
+
+    def delete_connectivity_service(self, service_uuid, conn_info=None):
+        """Disconnect multi-site endpoints previously connected
+
+        This method should receive as the first argument the UUID generated by
+        the ``create_connectivity_service``
+        """
+        try:
+            self.logger.info("Sending delete")
+            servicepoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services/vpn-service={}/".format(
+                self.wim["wim_url"], service_uuid
+            )
+            response = requests.delete(servicepoint, auth=self.auth)
+
+            if response.status_code != requests.codes.no_content:
+                raise SdnConnectorError(
+                    "Error in the request", http_code=response.status_code
+                )
+        except requests.exceptions.ConnectionError:
+            raise SdnConnectorError("Request Timeout", http_code=408)
+
+    def edit_connectivity_service(
+        self, service_uuid, conn_info=None, connection_points=None, **kwargs
+    ):
+        """Change an existing connectivity service, see
+        ``create_connectivity_service``"""
+        # sites = {"sites": {}}
+        # site_list = []
+        vpn_service = {}
+        vpn_service["svc-topo"] = "any-to-any"
+        counter = 0
+
+        for connection_point in connection_points:
+            site_network_access = {}
+            connection_point_wan_info = self.search_mapp(connection_point)
+            params_site = {}
+            params_site["site-id"] = connection_point_wan_info["service_mapping_info"][
+                "site-id"
+            ]
+            params_site["site-vpn-flavor"] = "site-vpn-flavor-single"
+            device_site = {}
+            device_site["device-id"] = connection_point_wan_info["device-id"]
+            params_site["devices"] = device_site
+            # network_access = {}
+            connection = {}
+
+            if connection_point["service_endpoint_encapsulation_type"] != "none":
+                if connection_point["service_endpoint_encapsulation_type"] == "dot1q":
+                    """The connection is a VLAN"""
+                    connection["encapsulation-type"] = "dot1q-vlan-tagged"
+                    tagged = {}
+                    tagged_interf = {}
+                    service_endpoint_encapsulation_info = connection_point[
+                        "service_endpoint_encapsulation_info"
+                    ]
+
+                    if service_endpoint_encapsulation_info["vlan"] is None:
+                        raise SdnConnectorError("VLAN must be provided")
+
+                    tagged_interf["cvlan-id"] = service_endpoint_encapsulation_info[
+                        "vlan"
+                    ]
+                    tagged["dot1q-vlan-tagged"] = tagged_interf
+                    connection["tagged-interface"] = tagged
+                else:
+                    raise NotImplementedError("Encapsulation type not implemented")
+
+            site_network_access["connection"] = connection
+            vpn_attach = {}
+            vpn_attach["vpn-id"] = service_uuid
+            vpn_attach["site-role"] = vpn_service["svc-topo"] + "-role"
+            site_network_access["vpn-attachment"] = vpn_attach
+            uuid_sna = conn_info[counter]["site-network-access-id"]
+            site_network_access["network-access-id"] = uuid_sna
+            site_network_access["bearer"] = connection_point_wan_info[
+                "service_mapping_info"
+            ]["bearer"]
+            site_network_accesses = {}
+            site_network_access_list = []
+            site_network_access_list.append(site_network_access)
+            site_network_accesses[
+                "ietf-l2vpn-svc:site-network-access"
+            ] = site_network_access_list
+
+            try:
+                endpoint_site_network_access_edit = (
+                    "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/"
+                    "sites/site={}/site-network-accesses/".format(
+                        self.wim["wim_url"],
+                        connection_point_wan_info["service_mapping_info"]["site-id"],
+                    )
+                )
+                response_endpoint_site_network_access_creation = requests.put(
+                    endpoint_site_network_access_edit,
+                    headers=self.headers,
+                    json=site_network_accesses,
+                    auth=self.auth,
+                )
+
+                if response_endpoint_site_network_access_creation.status_code == 400:
+                    raise SdnConnectorError(
+                        "Service does not exist",
+                        http_code=response_endpoint_site_network_access_creation.status_code,
+                    )
+                elif (
+                    response_endpoint_site_network_access_creation.status_code != 201
+                    and response_endpoint_site_network_access_creation.status_code
+                    != 204
+                ):
+                    raise SdnConnectorError(
+                        "Request no accepted",
+                        http_code=response_endpoint_site_network_access_creation.status_code,
+                    )
+            except requests.exceptions.ConnectionError:
+                raise SdnConnectorError("Request Timeout", http_code=408)
+
+            counter += 1
+
+        return None
+
+    def clear_all_connectivity_services(self):
+        """Delete all WAN Links corresponding to a WIM"""
+        try:
+            self.logger.info("Sending clear all connectivity services")
+            servicepoint = (
+                "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format(
+                    self.wim["wim_url"]
+                )
+            )
+            response = requests.delete(servicepoint, auth=self.auth)
+
+            if response.status_code != requests.codes.no_content:
+                raise SdnConnectorError(
+                    "Unable to clear all connectivity services",
+                    http_code=response.status_code,
+                )
+        except requests.exceptions.ConnectionError:
+            raise SdnConnectorError("Request Timeout", http_code=408)
+
+    def get_all_active_connectivity_services(self):
+        """Provide information about all active connections provisioned by a
+        WIM
+        """
+        try:
+            self.logger.info("Sending get all connectivity services")
+            servicepoint = (
+                "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format(
+                    self.wim["wim_url"]
+                )
+            )
+            response = requests.get(servicepoint, auth=self.auth)
+
+            if response.status_code != requests.codes.ok:
+                raise SdnConnectorError(
+                    "Unable to get all connectivity services",
+                    http_code=response.status_code,
+                )
+
+            return response
+        except requests.exceptions.ConnectionError:
+            raise SdnConnectorError("Request Timeout", http_code=408)
diff --git a/src/device/service/drivers/ietf_l2vpn/__init__.py b/src/device/service/drivers/ietf_l2vpn/__init__.py
index 38d04994f..2d3f6df32 100644
--- a/src/device/service/drivers/ietf_l2vpn/__init__.py
+++ b/src/device/service/drivers/ietf_l2vpn/__init__.py
@@ -11,3 +11,17 @@
 # WITHOUT 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 device.service.driver_api._Driver import RESOURCE_ENDPOINTS, RESOURCE_INTERFACES, RESOURCE_NETWORK_INSTANCES
+
+ALL_RESOURCE_KEYS = [
+    RESOURCE_ENDPOINTS,
+    RESOURCE_INTERFACES,
+    RESOURCE_NETWORK_INSTANCES,
+]
+
+RESOURCE_KEY_MAPPINGS = {
+    RESOURCE_ENDPOINTS        : 'component',
+    RESOURCE_INTERFACES       : 'interface',
+    RESOURCE_NETWORK_INSTANCES: 'network_instance',
+}
diff --git a/src/device/service/drivers/ietf_l2vpn/acknowledgements.txt b/src/device/service/drivers/ietf_l2vpn/acknowledgements.txt
new file mode 100644
index 000000000..3a7ed47ad
--- /dev/null
+++ b/src/device/service/drivers/ietf_l2vpn/acknowledgements.txt
@@ -0,0 +1,3 @@
+IETF L2VPN Driver is based on source code taken from:
+https://osm.etsi.org/gitlab/osm/ro/-/blob/master/RO-plugin/osm_ro_plugin/sdnconn.py
+https://osm.etsi.org/gitlab/osm/ro/-/blob/master/RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn/wimconn_ietfl2vpn.py
diff --git a/src/device/service/drivers/ietf_l2vpn/sdnconn.py b/src/device/service/drivers/ietf_l2vpn/sdnconn.py
new file mode 100644
index 000000000..a1849c9ef
--- /dev/null
+++ b/src/device/service/drivers/ietf_l2vpn/sdnconn.py
@@ -0,0 +1,242 @@
+# -*- coding: utf-8 -*-
+##
+# Copyright 2018 University of Bristol - High Performance Networks Research
+# Group
+# All Rights Reserved.
+#
+# Contributors: Anderson Bravalheri, Dimitrios Gkounis, Abubakar Siddique
+# Muqaddas, Navdeep Uniyal, Reza Nejabati and Dimitra Simeonidou
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# For those usages not covered by the Apache License, Version 2.0 please
+# contact with: <highperformance-networks@bristol.ac.uk>
+#
+# Neither the name of the University of Bristol nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# This work has been performed in the context of DCMS UK 5G Testbeds
+# & Trials Programme and in the framework of the Metro-Haul project -
+# funded by the European Commission under Grant number 761727 through the
+# Horizon 2020 and 5G-PPP programmes.
+##
+"""The SDN connector is responsible for establishing both wide area network connectivity (WIM)
+and intranet SDN connectivity.
+
+It receives information from ports to be connected .
+"""
+
+import logging
+from http import HTTPStatus
+
+
+class SdnConnectorError(Exception):
+    """Base Exception for all connector related errors
+    provide the parameter 'http_code' (int) with the error code:
+        Bad_Request = 400
+        Unauthorized = 401  (e.g. credentials are not valid)
+        Not_Found = 404    (e.g. try to edit or delete a non existing connectivity service)
+        Forbidden = 403
+        Method_Not_Allowed = 405
+        Not_Acceptable = 406
+        Request_Timeout = 408  (e.g timeout reaching server, or cannot reach the server)
+        Conflict = 409
+        Service_Unavailable = 503
+        Internal_Server_Error = 500
+    """
+
+    def __init__(self, message, http_code=HTTPStatus.INTERNAL_SERVER_ERROR.value):
+        Exception.__init__(self, message)
+        self.http_code = http_code
+
+
+class SdnConnectorBase(object):
+    """Abstract base class for all the SDN connectors
+
+    Arguments:
+        wim (dict): WIM record, as stored in the database
+        wim_account (dict): WIM account record, as stored in the database
+        config
+    The arguments of the constructor are converted to object attributes.
+    An extra property, ``service_endpoint_mapping`` is created from ``config``.
+    """
+
+    def __init__(self, wim, wim_account, config=None, logger=None):
+        """
+        :param wim: (dict). Contains among others 'wim_url'
+        :param wim_account: (dict). Contains among others 'uuid' (internal id), 'name',
+            'sdn' (True if is intended for SDN-assist or False if intended for WIM), 'user', 'password'.
+        :param config: (dict or None): Particular information of plugin. These keys if present have a common meaning:
+            'mapping_not_needed': (bool) False by default or if missing, indicates that mapping is not needed.
+            'service_endpoint_mapping': (list) provides the internal endpoint mapping. The meaning is:
+                KEY                     meaning for WIM             meaning for SDN assist
+                --------                --------                    --------
+                device_id               pop_switch_dpid             compute_id
+                device_interface_id     pop_switch_port             compute_pci_address
+                service_endpoint_id     wan_service_endpoint_id     SDN_service_endpoint_id
+                service_mapping_info    wan_service_mapping_info    SDN_service_mapping_info
+                    contains extra information if needed. Text in Yaml format
+                switch_dpid             wan_switch_dpid             SDN_switch_dpid
+                switch_port             wan_switch_port             SDN_switch_port
+                datacenter_id           vim_account                 vim_account
+            id: (internal, do not use)
+            wim_id: (internal, do not use)
+        :param logger (logging.Logger): optional logger object. If none is passed 'openmano.sdn.sdnconn' is used.
+        """
+        self.logger = logger or logging.getLogger("ro.sdn")
+        self.wim = wim
+        self.wim_account = wim_account
+        self.config = config or {}
+        self.service_endpoint_mapping = self.config.get("service_endpoint_mapping", [])
+
+    def check_credentials(self):
+        """Check if the connector itself can access the SDN/WIM with the provided url (wim.wim_url),
+            user (wim_account.user), and password (wim_account.password)
+
+        Raises:
+            SdnConnectorError: Issues regarding authorization, access to
+                external URLs, etc are detected.
+        """
+        raise NotImplementedError
+
+    def get_connectivity_service_status(self, service_uuid, conn_info=None):
+        """Monitor the status of the connectivity service established
+
+        Arguments:
+            service_uuid (str): UUID of the connectivity service
+            conn_info (dict or None): Information returned by the connector
+                during the service creation/edition and subsequently stored in
+                the database.
+
+        Returns:
+            dict: JSON/YAML-serializable dict that contains a mandatory key
+                ``sdn_status`` associated with one of the following values::
+
+                    {'sdn_status': 'ACTIVE'}
+                        # The service is up and running.
+
+                    {'sdn_status': 'INACTIVE'}
+                        # The service was created, but the connector
+                        # cannot determine yet if connectivity exists
+                        # (ideally, the caller needs to wait and check again).
+
+                    {'sdn_status': 'DOWN'}
+                        # Connection was previously established,
+                        # but an error/failure was detected.
+
+                    {'sdn_status': 'ERROR'}
+                        # An error occurred when trying to create the service/
+                        # establish the connectivity.
+
+                    {'sdn_status': 'BUILD'}
+                        # Still trying to create the service, the caller
+                        # needs to wait and check again.
+
+                Additionally ``error_msg``(**str**) and ``sdn_info``(**dict**)
+                keys can be used to provide additional status explanation or
+                new information available for the connectivity service.
+        """
+        raise NotImplementedError
+
+    def create_connectivity_service(self, service_type, connection_points, **kwargs):
+        """
+        Establish SDN/WAN connectivity between the endpoints
+        :param service_type: (str): ``ELINE`` (L2), ``ELAN`` (L2), ``ETREE`` (L2), ``L3``.
+        :param connection_points:  (list): each point corresponds to
+            an entry point to be connected. For WIM: from the DC to the transport network.
+            For SDN: Compute/PCI to the transport network. One
+            connection point serves to identify the specific access and
+            some other service parameters, such as encapsulation type.
+            Each item of the list is a dict with:
+                "service_endpoint_id": (str)(uuid)  Same meaning that for 'service_endpoint_mapping' (see __init__)
+                    In case the config attribute mapping_not_needed is True, this value is not relevant. In this case
+                    it will contain the string "device_id:device_interface_id"
+                "service_endpoint_encapsulation_type": None, "dot1q", ...
+                "service_endpoint_encapsulation_info": (dict) with:
+                    "vlan": ..., (int, present if encapsulation is dot1q)
+                    "vni": ... (int, present if encapsulation is vxlan),
+                    "peers": [(ipv4_1), (ipv4_2)] (present if encapsulation is vxlan)
+                    "mac": ...
+                    "device_id": ..., same meaning that for 'service_endpoint_mapping' (see __init__)
+                    "device_interface_id": same meaning that for 'service_endpoint_mapping' (see __init__)
+                    "switch_dpid": ..., present if mapping has been found for this device_id,device_interface_id
+                    "swith_port": ... present if mapping has been found for this device_id,device_interface_id
+                    "service_mapping_info": present if mapping has been found for this device_id,device_interface_id
+        :param kwargs: For future versions:
+            bandwidth (int): value in kilobytes
+            latency (int): value in milliseconds
+            Other QoS might be passed as keyword arguments.
+        :return: tuple: ``(service_id, conn_info)`` containing:
+            - *service_uuid* (str): UUID of the established connectivity service
+            - *conn_info* (dict or None): Information to be stored at the database (or ``None``).
+                This information will be provided to the :meth:`~.edit_connectivity_service` and :obj:`~.delete`.
+                **MUST** be JSON/YAML-serializable (plain data structures).
+        :raises: SdnConnectorException: In case of error. Nothing should be created in this case.
+            Provide the parameter http_code
+        """
+        raise NotImplementedError
+
+    def delete_connectivity_service(self, service_uuid, conn_info=None):
+        """
+        Disconnect multi-site endpoints previously connected
+
+        :param service_uuid: The one returned by create_connectivity_service
+        :param conn_info: The one returned by last call to 'create_connectivity_service' or 'edit_connectivity_service'
+            if they do not return None
+        :return: None
+        :raises: SdnConnectorException: In case of error. The parameter http_code must be filled
+        """
+        raise NotImplementedError
+
+    def edit_connectivity_service(
+        self, service_uuid, conn_info=None, connection_points=None, **kwargs
+    ):
+        """Change an existing connectivity service.
+
+        This method's arguments and return value follow the same convention as
+        :meth:`~.create_connectivity_service`.
+
+        :param service_uuid: UUID of the connectivity service.
+        :param conn_info: (dict or None): Information previously returned by last call to create_connectivity_service
+            or edit_connectivity_service
+        :param connection_points: (list): If provided, the old list of connection points will be replaced.
+        :param kwargs: Same meaning that create_connectivity_service
+        :return: dict or None: Information to be updated and stored at the database.
+                When ``None`` is returned, no information should be changed.
+                When an empty dict is returned, the database record will be deleted.
+                **MUST** be JSON/YAML-serializable (plain data structures).
+        Raises:
+            SdnConnectorException: In case of error.
+        """
+
+    def clear_all_connectivity_services(self):
+        """Delete all WAN Links in a WIM.
+
+        This method is intended for debugging only, and should delete all the
+        connections controlled by the WIM/SDN, not only the  connections that
+        a specific RO is aware of.
+
+        Raises:
+            SdnConnectorException: In case of error.
+        """
+        raise NotImplementedError
+
+    def get_all_active_connectivity_services(self):
+        """Provide information about all active connections provisioned by a
+        WIM.
+
+        Raises:
+            SdnConnectorException: In case of error.
+        """
+        raise NotImplementedError
-- 
GitLab


From 33ba41e5a9ce7024fccc0e8f71e34ae9d177253c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 16:31:52 +0000
Subject: [PATCH 092/229] Service component - L2NM IETF L2VPN Service Handler:

- backup WORK IN PROGRESS
---
 .../service/service_handlers/__init__.py      |   7 +
 .../L2NM_IETFL2VPN_ServiceHandler.py          | 171 ++++++++++++++++++
 .../l2nm_ietfl2vpn/__init__.py                |  14 ++
 3 files changed, 192 insertions(+)
 create mode 100644 src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
 create mode 100644 src/service/service/service_handlers/l2nm_ietfl2vpn/__init__.py

diff --git a/src/service/service/service_handlers/__init__.py b/src/service/service/service_handlers/__init__.py
index 4c9059779..9b4e442e5 100644
--- a/src/service/service/service_handlers/__init__.py
+++ b/src/service/service/service_handlers/__init__.py
@@ -21,6 +21,7 @@ from .l3nm_openconfig.L3NMOpenConfigServiceHandler import L3NMOpenConfigServiceH
 from .p4.p4_service_handler import P4ServiceHandler
 from .tapi_tapi.TapiServiceHandler import TapiServiceHandler
 from .microwave.MicrowaveServiceHandler import MicrowaveServiceHandler
+from .l2nm_ietfl2vpn.L2NM_IETFL2VPN_ServiceHandler import L2NM_IETFL2VPN_ServiceHandler
 
 SERVICE_HANDLERS = [
     (L2NMEmulatedServiceHandler, [
@@ -65,4 +66,10 @@ SERVICE_HANDLERS = [
             FilterFieldEnum.DEVICE_DRIVER: DeviceDriverEnum.DEVICEDRIVER_P4,
         }
     ]),
+    (L2NM_IETFL2VPN_ServiceHandler, [
+        {
+            FilterFieldEnum.SERVICE_TYPE  : ServiceTypeEnum.SERVICETYPE_L2NM,
+            FilterFieldEnum.DEVICE_DRIVER : [DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN],
+        }
+    ]),
 ]
diff --git a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
new file mode 100644
index 000000000..1f5817fe8
--- /dev/null
+++ b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
@@ -0,0 +1,171 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json, logging
+from typing import Any, Dict, List, Optional, Tuple, Union
+from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
+from common.proto.context_pb2 import ConfigRule, DeviceId, Service
+from common.tools.object_factory.ConfigRule import json_config_rule_delete, json_config_rule_set
+from common.tools.object_factory.Device import json_device_id
+from common.type_checkers.Checkers import chk_type
+from service.service.service_handler_api.Tools import get_device_endpoint_uuids, get_endpoint_matching
+from service.service.service_handler_api._ServiceHandler import _ServiceHandler
+from service.service.service_handler_api.SettingsHandler import SettingsHandler
+from service.service.task_scheduler.TaskExecutor import TaskExecutor
+
+LOGGER = logging.getLogger(__name__)
+
+METRICS_POOL = MetricsPool('Service', 'Handler', labels={'handler': 'tapi_tapi'})
+
+class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
+    def __init__(   # pylint: disable=super-init-not-called
+        self, service : Service, task_executor : TaskExecutor, **settings
+    ) -> None:
+        self.__service = service
+        self.__task_executor = task_executor
+        self.__settings_handler = SettingsHandler(service.service_config, **settings)
+
+    @metered_subclass_method(METRICS_POOL)
+    def SetEndpoint(
+        self, endpoints : List[Tuple[str, str, Optional[str]]], connection_uuid : Optional[str] = None
+    ) -> List[Union[bool, Exception]]:
+
+        chk_type('endpoints', endpoints, list)
+        if len(endpoints) != 2: return []
+
+        service_uuid = self.__service.service_id.service_uuid.uuid
+        settings = self.__settings_handler.get('/settings')
+        json_settings : Dict = {} if settings is None else settings.value
+        capacity_value   = json_settings.get('capacity_value',   50.0)
+        capacity_unit    = json_settings.get('capacity_unit',    'GHz')
+        layer_proto_name = json_settings.get('layer_proto_name', 'PHOTONIC_MEDIA')
+        layer_proto_qual = json_settings.get('layer_proto_qual', 'tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC')
+        direction        = json_settings.get('direction',        'UNIDIRECTIONAL')
+
+        results = []
+        try:
+            device_uuid_src, endpoint_uuid_src = get_device_endpoint_uuids(endpoints[0])
+            device_uuid_dst, endpoint_uuid_dst = get_device_endpoint_uuids(endpoints[1])
+
+            if device_uuid_src != device_uuid_dst:
+                raise Exception('Diferent Src-Dst devices not supported by now')
+            device_uuid = device_uuid_src
+
+            device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+            endpoint_name_src = get_endpoint_matching(device_obj, endpoint_uuid_src).name
+            endpoint_name_dst = get_endpoint_matching(device_obj, endpoint_uuid_dst).name
+
+            json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
+                'uuid'                    : service_uuid,
+                'input_sip'               : endpoint_name_src,
+                'output_sip'              : endpoint_name_dst,
+                'capacity_unit'           : capacity_unit,
+                'capacity_value'          : capacity_value,
+                'layer_protocol_name'     : layer_proto_name,
+                'layer_protocol_qualifier': layer_proto_qual,
+                'direction'               : direction,
+            })
+            del device_obj.device_config.config_rules[:]
+            device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
+            self.__task_executor.configure_device(device_obj)
+            results.append(True)
+        except Exception as e: # pylint: disable=broad-except
+            LOGGER.exception('Unable to SetEndpoint for Service({:s})'.format(str(service_uuid)))
+            results.append(e)
+
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def DeleteEndpoint(
+        self, endpoints : List[Tuple[str, str, Optional[str]]], connection_uuid : Optional[str] = None
+    ) -> List[Union[bool, Exception]]:
+
+        chk_type('endpoints', endpoints, list)
+        if len(endpoints) != 2: return []
+
+        service_uuid = self.__service.service_id.service_uuid.uuid
+
+        results = []
+        try:
+            device_uuid_src, _ = get_device_endpoint_uuids(endpoints[0])
+            device_uuid_dst, _ = get_device_endpoint_uuids(endpoints[1])
+
+            if device_uuid_src != device_uuid_dst:
+                raise Exception('Diferent Src-Dst devices not supported by now')
+            device_uuid = device_uuid_src
+
+            device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+
+            json_config_rule = json_config_rule_delete('/services/service[{:s}]'.format(service_uuid), {
+                'uuid': service_uuid
+            })
+            del device_obj.device_config.config_rules[:]
+            device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
+            self.__task_executor.configure_device(device_obj)
+            results.append(True)
+        except Exception as e: # pylint: disable=broad-except
+            LOGGER.exception('Unable to DeleteEndpoint for Service({:s})'.format(str(service_uuid)))
+            results.append(e)
+
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def SetConstraint(self, constraints : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('constraints', constraints, list)
+        if len(constraints) == 0: return []
+
+        msg = '[SetConstraint] Method not implemented. Constraints({:s}) are being ignored.'
+        LOGGER.warning(msg.format(str(constraints)))
+        return [True for _ in range(len(constraints))]
+
+    @metered_subclass_method(METRICS_POOL)
+    def DeleteConstraint(self, constraints : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('constraints', constraints, list)
+        if len(constraints) == 0: return []
+
+        msg = '[DeleteConstraint] Method not implemented. Constraints({:s}) are being ignored.'
+        LOGGER.warning(msg.format(str(constraints)))
+        return [True for _ in range(len(constraints))]
+
+    @metered_subclass_method(METRICS_POOL)
+    def SetConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('resources', resources, list)
+        if len(resources) == 0: return []
+
+        results = []
+        for resource in resources:
+            try:
+                resource_value = json.loads(resource[1])
+                self.__settings_handler.set(resource[0], resource_value)
+                results.append(True)
+            except Exception as e: # pylint: disable=broad-except
+                LOGGER.exception('Unable to SetConfig({:s})'.format(str(resource)))
+                results.append(e)
+
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def DeleteConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('resources', resources, list)
+        if len(resources) == 0: return []
+
+        results = []
+        for resource in resources:
+            try:
+                self.__settings_handler.delete(resource[0])
+            except Exception as e: # pylint: disable=broad-except
+                LOGGER.exception('Unable to DeleteConfig({:s})'.format(str(resource)))
+                results.append(e)
+
+        return results
diff --git a/src/service/service/service_handlers/l2nm_ietfl2vpn/__init__.py b/src/service/service/service_handlers/l2nm_ietfl2vpn/__init__.py
new file mode 100644
index 000000000..1549d9811
--- /dev/null
+++ b/src/service/service/service_handlers/l2nm_ietfl2vpn/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
-- 
GitLab


From 384f7e9caebc16aa11ed62a0ac1af0deb9f8848d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 16:35:34 +0000
Subject: [PATCH 093/229] Service component:

- Reduced log level of TaskScheduler internal log messages
---
 src/service/service/task_scheduler/TaskScheduler.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/service/service/task_scheduler/TaskScheduler.py b/src/service/service/task_scheduler/TaskScheduler.py
index f55527e47..fbc554aa2 100644
--- a/src/service/service/task_scheduler/TaskScheduler.py
+++ b/src/service/service/task_scheduler/TaskScheduler.py
@@ -130,7 +130,7 @@ class TasksScheduler:
                 self._dag.add(connection_key, service_key_done)
 
         t1 = time.time()
-        LOGGER.info('[compose_from_pathcompreply] elapsed_time: {:f} sec'.format(t1-t0))
+        LOGGER.debug('[compose_from_pathcompreply] elapsed_time: {:f} sec'.format(t1-t0))
 
     def compose_from_service(self, service : Service, is_delete : bool = False) -> None:
         t0 = time.time()
@@ -196,11 +196,11 @@ class TasksScheduler:
                 raise Exception(MSG.format(type(item).__name__, grpc_message_to_json_string(item)))
 
         t1 = time.time()
-        LOGGER.info('[compose_from_service] elapsed_time: {:f} sec'.format(t1-t0))
+        LOGGER.debug('[compose_from_service] elapsed_time: {:f} sec'.format(t1-t0))
 
     def execute_all(self, dry_run : bool = False) -> None:
         ordered_task_keys = list(self._dag.static_order())
-        LOGGER.info('[execute_all] ordered_task_keys={:s}'.format(str(ordered_task_keys)))
+        LOGGER.debug('[execute_all] ordered_task_keys={:s}'.format(str(ordered_task_keys)))
 
         results = []
         for task_key in ordered_task_keys:
@@ -208,5 +208,5 @@ class TasksScheduler:
             succeeded = True if dry_run else task.execute()
             results.append(succeeded)
 
-        LOGGER.info('[execute_all] results={:s}'.format(str(results)))
+        LOGGER.debug('[execute_all] results={:s}'.format(str(results)))
         return zip(ordered_task_keys, results)
-- 
GitLab


From 08e7992a1c569878f6513be2b7c2b551f4d0ee94 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 16:36:28 +0000
Subject: [PATCH 094/229] Context component:

- Corrected method UnsetSlice to remove endpoints, constraints, and config rules
---
 src/context/service/database/ConfigRule.py |  8 +++---
 src/context/service/database/Constraint.py | 30 ++++++++++++----------
 src/context/service/database/Slice.py      | 14 ++++++----
 3 files changed, 29 insertions(+), 23 deletions(-)

diff --git a/src/context/service/database/ConfigRule.py b/src/context/service/database/ConfigRule.py
index dd60441ca..09723cc6f 100644
--- a/src/context/service/database/ConfigRule.py
+++ b/src/context/service/database/ConfigRule.py
@@ -80,7 +80,7 @@ def compose_config_rules_data(
     return dict_config_rules
 
 def upsert_config_rules(
-    session : Session, config_rules : List[Dict],
+    session : Session, config_rules : List[Dict], is_delete : bool = False,
     device_uuid : Optional[str] = None, service_uuid : Optional[str] = None, slice_uuid : Optional[str] = None,
 ) -> bool:
     uuids_to_delete : Set[str] = set()
@@ -89,7 +89,9 @@ def upsert_config_rules(
     for config_rule in config_rules:
         configrule_uuid = config_rule['configrule_uuid']
         configrule_action = config_rule['action']
-        if configrule_action == ORM_ConfigActionEnum.SET:
+        if is_delete or configrule_action == ORM_ConfigActionEnum.DELETE:
+            uuids_to_delete.add(configrule_uuid)
+        elif configrule_action == ORM_ConfigActionEnum.SET:
             position = uuids_to_upsert.get(configrule_uuid)
             if position is None:
                 # if not added, add it
@@ -98,8 +100,6 @@ def upsert_config_rules(
             else:
                 # if already added, update occurrence
                 rules_to_upsert[position] = config_rule
-        elif configrule_action == ORM_ConfigActionEnum.DELETE:
-            uuids_to_delete.add(configrule_uuid)
         else:
             MSG = 'Action for ConfigRule({:s}) is not supported '+\
                   '(device_uuid={:s}, service_uuid={:s}, slice_uuid={:s})'
diff --git a/src/context/service/database/Constraint.py b/src/context/service/database/Constraint.py
index b37d0dcad..5ebe36f99 100644
--- a/src/context/service/database/Constraint.py
+++ b/src/context/service/database/Constraint.py
@@ -81,29 +81,31 @@ def compose_constraints_data(
     return dict_constraints
 
 def upsert_constraints(
-    session : Session, constraints : List[Dict],
+    session : Session, constraints : List[Dict], is_delete : bool = False,
     service_uuid : Optional[str] = None, slice_uuid : Optional[str] = None
 ) -> bool:
     uuids_to_upsert : Dict[str, int] = dict()
     rules_to_upsert : List[Dict] = list()
-    for constraint in constraints:
-        constraint_uuid = constraint['constraint_uuid']
-        position = uuids_to_upsert.get(constraint_uuid)
-        if position is None:
-            # if not added, add it
-            rules_to_upsert.append(constraint)
-            uuids_to_upsert[constraint_uuid] = len(rules_to_upsert) - 1
-        else:
-            # if already added, update occurrence
-            rules_to_upsert[position] = constraint
+    if not is_delete:
+        for constraint in constraints:
+            constraint_uuid = constraint['constraint_uuid']
+            position = uuids_to_upsert.get(constraint_uuid)
+            if position is None:
+                # if not added, add it
+                rules_to_upsert.append(constraint)
+                uuids_to_upsert[constraint_uuid] = len(rules_to_upsert) - 1
+            else:
+                # if already added, update occurrence
+                rules_to_upsert[position] = constraint
 
     # Delete all constraints not in uuids_to_upsert
     delete_affected = False
-    if len(uuids_to_upsert) > 0:
+    if is_delete or len(uuids_to_upsert) > 0:
         stmt = delete(ConstraintModel)
         if service_uuid is not None: stmt = stmt.where(ConstraintModel.service_uuid == service_uuid)
         if slice_uuid   is not None: stmt = stmt.where(ConstraintModel.slice_uuid   == slice_uuid  )
-        stmt = stmt.where(ConstraintModel.constraint_uuid.not_in(set(uuids_to_upsert.keys())))
+        if not is_delete:
+            stmt = stmt.where(ConstraintModel.constraint_uuid.not_in(set(uuids_to_upsert.keys())))
         #str_stmt = stmt.compile(dialect=postgresql.dialect(), compile_kwargs={"literal_binds": True})
         #LOGGER.warning('delete stmt={:s}'.format(str(str_stmt)))
         constraint_deletes = session.execute(stmt)
@@ -111,7 +113,7 @@ def upsert_constraints(
         delete_affected = int(constraint_deletes.rowcount) > 0
 
     upsert_affected = False
-    if len(constraints) > 0:
+    if not is_delete and len(constraints) > 0:
         stmt = insert(ConstraintModel).values(constraints)
         stmt = stmt.on_conflict_do_update(
             index_elements=[ConstraintModel.constraint_uuid],
diff --git a/src/context/service/database/Slice.py b/src/context/service/database/Slice.py
index 80af759de..1d6781d53 100644
--- a/src/context/service/database/Slice.py
+++ b/src/context/service/database/Slice.py
@@ -178,10 +178,6 @@ def slice_unset(db_engine : Engine, request : Slice) -> Tuple[Dict, bool]:
     slice_name = raw_slice_uuid if len(raw_slice_name) == 0 else raw_slice_name
     context_uuid,slice_uuid = slice_get_uuid(request.slice_id, slice_name=slice_name, allow_random=False)
 
-    if len(request.slice_constraints) > 0:         raise NotImplementedError('UnsetSlice: removal of constraints')
-    if len(request.slice_config.config_rules) > 0: raise NotImplementedError('UnsetSlice: removal of config rules')
-    #if len(request.slice_endpoint_ids) > 0:        raise NotImplementedError('UnsetSlice: removal of endpoints')
-
     slice_endpoint_uuids : Set[str] = set()
     for i,endpoint_id in enumerate(request.slice_endpoint_ids):
         endpoint_context_uuid = endpoint_id.topology_id.context_id.context_uuid.uuid
@@ -203,6 +199,10 @@ def slice_unset(db_engine : Engine, request : Slice) -> Tuple[Dict, bool]:
         for subslice_id in request.slice_subslice_ids
     }
 
+    now = datetime.datetime.utcnow()
+    constraints = compose_constraints_data(request.slice_constraints, now, slice_uuid=slice_uuid)
+    config_rules = compose_config_rules_data(request.slice_config.config_rules, now, slice_uuid=slice_uuid)
+
     def callback(session : Session) -> bool:
         num_deletes = 0
         if len(slice_service_uuids) > 0:
@@ -223,7 +223,11 @@ def slice_unset(db_engine : Engine, request : Slice) -> Tuple[Dict, bool]:
                     SliceEndPointModel.slice_uuid == slice_uuid,
                     SliceEndPointModel.endpoint_uuid.in_(slice_endpoint_uuids)
                 )).delete()
-        return num_deletes > 0
+
+        changed_constraints = upsert_constraints(session, constraints, is_delete=True, slice_uuid=slice_uuid)
+        changed_config_rules = upsert_config_rules(session, config_rules, is_delete=True, slice_uuid=slice_uuid)
+
+        return num_deletes > 0 or changed_constraints or changed_config_rules
 
     updated = run_transaction(sessionmaker(bind=db_engine), callback)
     return json_slice_id(slice_uuid, json_context_id(context_uuid)),updated
-- 
GitLab


From d34a33b9a5d5641d9f358e6eb6ba9a38b7b32834 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 16:54:37 +0000
Subject: [PATCH 095/229] Slice component:

- Added old test files
---
 src/slice/tests/old/Main.py            |  98 +++++++++++++++++++++
 src/slice/tests/old/MetricsExporter.py | 116 +++++++++++++++++++++++++
 src/slice/tests/old/test_kmeans.py     |  77 ++++++++++++++++
 src/slice/tests/old/test_subslices.py  |  96 ++++++++++++++++++++
 4 files changed, 387 insertions(+)
 create mode 100644 src/slice/tests/old/Main.py
 create mode 100644 src/slice/tests/old/MetricsExporter.py
 create mode 100644 src/slice/tests/old/test_kmeans.py
 create mode 100644 src/slice/tests/old/test_subslices.py

diff --git a/src/slice/tests/old/Main.py b/src/slice/tests/old/Main.py
new file mode 100644
index 000000000..0924f1c64
--- /dev/null
+++ b/src/slice/tests/old/Main.py
@@ -0,0 +1,98 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging, os, pandas, random, sys, time
+#from matplotlib import pyplot as plt
+from sklearn.cluster import KMeans
+from typing import Dict, List, Tuple
+
+os.environ['METRICSDB_HOSTNAME' ] = '127.0.0.1' #'questdb-public.qdb.svc.cluster.local'
+os.environ['METRICSDB_ILP_PORT' ] = '9009'
+os.environ['METRICSDB_REST_PORT'] = '9000'
+
+from .MetricsExporter import MetricsExporter # pylint: disable=wrong-import-position
+
+logging.basicConfig(level=logging.DEBUG)
+LOGGER : logging.Logger = logging.getLogger(__name__)
+
+def get_random_slices(count : int) -> List[Tuple[str, float, float]]:
+    slices = list()
+    for i in range(count):
+        slice_name          = 'slice-{:03d}'.format(i)
+        slice_availability  = random.uniform(00.0, 99.99)
+        slice_capacity_gbps = random.uniform(0.1, 100.0)
+        slices.append((slice_name, slice_availability, slice_capacity_gbps))
+    return slices
+
+def init_kmeans() -> Tuple[KMeans, Dict[str, int]]:
+    groups = [
+        # Name, avail[0..100], bw_gbps[0..100]
+        ('bronze',   10.0,  10.0), # ('silver',   25.0,  25.0),
+        ('silver',   30.0,  40.0), # ('silver',   25.0,  25.0),
+        ('gold',     70.0,  50.0), # ('gold',     90.0,  50.0),
+        ('platinum', 99.0, 100.0),
+    ]
+    df_groups = pandas.DataFrame(groups, columns=['name', 'availability', 'capacity'])
+
+    num_clusters = len(groups)
+    k_means = KMeans(n_clusters=num_clusters)
+    k_means.fit(df_groups[['availability', 'capacity']])
+
+    df_groups['label'] = k_means.predict(df_groups[['availability', 'capacity']])
+    mapping = {
+        group['name']:{k:v for k,v in group.items() if k != 'name'}
+        for group in list(df_groups.to_dict('records'))
+    }
+
+    return k_means, mapping
+
+def main():
+    LOGGER.info('Starting...')
+    metrics_exporter = MetricsExporter()
+    metrics_exporter.create_table()
+
+    k_means, mapping = init_kmeans()
+    label_to_group = {}
+    for group_name,group_attrs in mapping.items():
+        label = group_attrs['label']
+        availability = group_attrs['availability']
+        capacity = group_attrs['capacity']
+        metrics_exporter.export_point(group_name, group_name, availability, capacity, is_center=True)
+        label_to_group[label] = group_name
+
+    slices = get_random_slices(10000)
+    for slice_ in slices:
+        sample = pandas.DataFrame([slice_[1:3]], columns=['availability', 'capacity'])
+        sample['label'] = k_means.predict(sample)
+        sample = sample.to_dict('records')[0]
+        label = sample['label']
+        availability = sample['availability']
+        capacity = sample['capacity']
+        group_name = label_to_group[label]
+        metrics_exporter.export_point(slice_[0], group_name, availability, capacity, is_center=False)
+        time.sleep(0.01)
+
+    #df_silver   = df_slices[df_slices['group']==mapping['silver']]
+    #df_gold     = df_slices[df_slices['group']==mapping['gold']]
+    #df_platinum = df_slices[df_slices['group']==mapping['platinum']]
+    #plt.scatter(df_silver.availability,         df_silver.capacity,             s=25,  c='black' )
+    #plt.scatter(df_gold.availability,           df_gold.capacity,               s=25,  c='gold'  )
+    #plt.scatter(df_platinum.availability,       df_platinum.capacity,           s=25,  c='silver')
+    #plt.scatter(k_means.cluster_centers_[:, 0], k_means.cluster_centers_[:, 1], s=100, c='red'   )
+
+    LOGGER.info('Bye')
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/src/slice/tests/old/MetricsExporter.py b/src/slice/tests/old/MetricsExporter.py
new file mode 100644
index 000000000..3c04cb9fc
--- /dev/null
+++ b/src/slice/tests/old/MetricsExporter.py
@@ -0,0 +1,116 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import datetime, logging, os, requests
+from typing import Any, Literal, Union
+from questdb.ingress import Sender, IngressError # pylint: disable=no-name-in-module
+
+LOGGER = logging.getLogger(__name__)
+
+MAX_RETRIES = 10
+DELAY_RETRIES = 0.5
+
+MSG_EXPORT_EXECUTED   = '[rest_request] Export(timestamp={:s}, symbols={:s}, columns={:s}) executed'
+MSG_EXPORT_FAILED     = '[rest_request] Export(timestamp={:s}, symbols={:s}, columns={:s}) failed, retry={:d}/{:d}...'
+MSG_REST_BAD_STATUS   = '[rest_request] Bad Reply url="{:s}" params="{:s}": status_code={:d} content={:s}'
+MSG_REST_EXECUTED     = '[rest_request] Query({:s}) executed, result: {:s}'
+MSG_REST_FAILED       = '[rest_request] Query({:s}) failed, retry={:d}/{:d}...'
+MSG_ERROR_MAX_RETRIES = 'Maximum number of retries achieved: {:d}'
+
+METRICSDB_HOSTNAME  = os.environ.get('METRICSDB_HOSTNAME')
+METRICSDB_ILP_PORT  = int(os.environ.get('METRICSDB_ILP_PORT'))
+METRICSDB_REST_PORT = int(os.environ.get('METRICSDB_REST_PORT'))
+METRICSDB_TABLE_SLICE_GROUPS = 'slice_groups'
+
+COLORS = {
+    'platinum': '#E5E4E2',
+    'gold'    : '#FFD700',
+    'silver'  : '#808080',
+    'bronze'  : '#CD7F32',
+}
+DEFAULT_COLOR = '#000000' # black
+
+class MetricsExporter():
+    def __init__(self) -> None:
+        pass
+
+    def create_table(self) -> None:
+        sql_query = ' '.join([
+            'CREATE TABLE IF NOT EXISTS {:s} ('.format(str(METRICSDB_TABLE_SLICE_GROUPS)),
+            ','.join([
+                'timestamp TIMESTAMP',
+                'slice_uuid SYMBOL',
+                'slice_group SYMBOL',
+                'slice_color SYMBOL',
+                'slice_availability DOUBLE',
+                'slice_capacity_center DOUBLE',
+                'slice_capacity DOUBLE',
+            ]),
+            ') TIMESTAMP(timestamp);'
+        ])
+        try:
+            result = self.rest_request(sql_query)
+            if not result: raise Exception
+            LOGGER.info('Table {:s} created'.format(str(METRICSDB_TABLE_SLICE_GROUPS)))
+        except Exception as e:
+            LOGGER.warning('Table {:s} cannot be created. {:s}'.format(str(METRICSDB_TABLE_SLICE_GROUPS), str(e)))
+            raise
+
+    def export_point(
+        self, slice_uuid : str, slice_group : str, slice_availability : float, slice_capacity : float,
+        is_center : bool = False
+    ) -> None:
+        dt_timestamp = datetime.datetime.utcnow()
+        slice_color = COLORS.get(slice_group, DEFAULT_COLOR)
+        symbols = dict(slice_uuid=slice_uuid, slice_group=slice_group, slice_color=slice_color)
+        columns = dict(slice_availability=slice_availability)
+        columns['slice_capacity_center' if is_center else 'slice_capacity'] = slice_capacity
+
+        for retry in range(MAX_RETRIES):
+            try:
+                with Sender(METRICSDB_HOSTNAME, METRICSDB_ILP_PORT) as sender:
+                    sender.row(METRICSDB_TABLE_SLICE_GROUPS, symbols=symbols, columns=columns, at=dt_timestamp)
+                    sender.flush()
+                LOGGER.info(MSG_EXPORT_EXECUTED.format(str(dt_timestamp), str(symbols), str(columns)))
+                return
+            except (Exception, IngressError): # pylint: disable=broad-except
+                LOGGER.exception(MSG_EXPORT_FAILED.format(
+                    str(dt_timestamp), str(symbols), str(columns), retry+1, MAX_RETRIES))
+
+        raise Exception(MSG_ERROR_MAX_RETRIES.format(MAX_RETRIES))
+
+    def rest_request(self, rest_query : str) -> Union[Any, Literal[True]]:
+        url = 'http://{:s}:{:d}/exec'.format(METRICSDB_HOSTNAME, METRICSDB_REST_PORT)
+        params = {'query': rest_query, 'fmt': 'json'}
+
+        for retry in range(MAX_RETRIES):
+            try:
+                response = requests.get(url, params=params)
+                status_code = response.status_code
+                if status_code not in {200}:
+                    str_content = response.content.decode('UTF-8')
+                    raise Exception(MSG_REST_BAD_STATUS.format(str(url), str(params), status_code, str_content))
+
+                json_response = response.json()
+                if 'ddl' in json_response:
+                    LOGGER.info(MSG_REST_EXECUTED.format(str(rest_query), str(json_response['ddl'])))
+                    return True
+                elif 'dataset' in json_response:
+                    LOGGER.info(MSG_REST_EXECUTED.format(str(rest_query), str(json_response['dataset'])))
+                    return json_response['dataset']
+
+            except Exception: # pylint: disable=broad-except
+                LOGGER.exception(MSG_REST_FAILED.format(str(rest_query), retry+1, MAX_RETRIES))
+
+        raise Exception(MSG_ERROR_MAX_RETRIES.format(MAX_RETRIES))
diff --git a/src/slice/tests/old/test_kmeans.py b/src/slice/tests/old/test_kmeans.py
new file mode 100644
index 000000000..3f54621c5
--- /dev/null
+++ b/src/slice/tests/old/test_kmeans.py
@@ -0,0 +1,77 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import pandas, random, sys
+from matplotlib import pyplot as plt
+from sklearn.cluster import KMeans
+from typing import Dict, List, Tuple
+
+def get_random_slices(count : int) -> List[Tuple[str, float, float]]:
+    slices = list()
+    for i in range(count):
+        slice_name          = 'slice-{:03d}'.format(i)
+        slice_availability  = random.uniform(00.0, 99.99)
+        slice_capacity_gbps = random.uniform(0.1, 100.0)
+        slices.append((slice_name, slice_availability, slice_capacity_gbps))
+    return slices
+
+def init_kmeans() -> Tuple[KMeans, Dict[str, int]]:
+    groups = [
+        # Name, avail[0..100], bw_gbps[0..100]
+        ('silver',   25.0,  50.0), # ('silver',   25.0,  25.0),
+        ('gold',     90.0,  10.0), # ('gold',     90.0,  50.0),
+        ('platinum', 99.0, 100.0),
+    ]
+    df_groups = pandas.DataFrame(groups, columns=['name', 'availability', 'capacity'])
+
+    num_clusters = len(groups)
+    k_means = KMeans(n_clusters=num_clusters)
+    k_means.fit(df_groups[['availability', 'capacity']])
+
+    df_groups['label'] = k_means.predict(df_groups[['availability', 'capacity']])
+    mapping = {group['name']:group['label'] for group in list(df_groups.to_dict('records'))}
+
+    return k_means, mapping
+
+def main():
+    k_means, mapping = init_kmeans()
+    slices = get_random_slices(500)
+    df_slices = pandas.DataFrame(slices, columns=['slice_uuid', 'availability', 'capacity'])
+
+    # predict one
+    #sample = df_slices[['availability', 'capacity']].iloc[[0]]
+    #y_predicted = k_means.predict(sample)
+    #y_predicted
+
+    df_slices['group'] = k_means.predict(df_slices[['availability', 'capacity']])
+
+    df_silver   = df_slices[df_slices['group']==mapping['silver']]
+    df_gold     = df_slices[df_slices['group']==mapping['gold']]
+    df_platinum = df_slices[df_slices['group']==mapping['platinum']]
+
+    plt.scatter(df_silver.availability,         df_silver.capacity,             s=25,  c='black' )
+    plt.scatter(df_gold.availability,           df_gold.capacity,               s=25,  c='gold'  )
+    plt.scatter(df_platinum.availability,       df_platinum.capacity,           s=25,  c='silver')
+    plt.scatter(k_means.cluster_centers_[:, 0], k_means.cluster_centers_[:, 1], s=100, c='red'   )
+    plt.xlabel('service-slo-availability')
+    plt.ylabel('service-slo-one-way-bandwidth')
+    #ax = plt.subplot(1, 1, 1)
+    #ax.set_ylim(bottom=0., top=1.)
+    #ax.set_xlim(left=0.)
+    plt.savefig('slice_grouping.png')
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/src/slice/tests/old/test_subslices.py b/src/slice/tests/old/test_subslices.py
new file mode 100644
index 000000000..39ee235df
--- /dev/null
+++ b/src/slice/tests/old/test_subslices.py
@@ -0,0 +1,96 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import sqlalchemy, sys
+from sqlalchemy import Column, ForeignKey, String, event, insert
+from sqlalchemy.orm import Session, declarative_base, relationship
+from typing import Dict
+
+def _fk_pragma_on_connect(dbapi_con, con_record):
+    dbapi_con.execute('pragma foreign_keys=ON')
+
+_Base = declarative_base()
+
+class SliceModel(_Base):
+    __tablename__ = 'slice'
+
+    slice_uuid = Column(String, primary_key=True)
+
+    slice_subslices = relationship(
+        'SliceSubSliceModel', primaryjoin='slice.c.slice_uuid == slice_subslice.c.slice_uuid')
+
+    def dump_id(self) -> Dict:
+        return {'uuid': self.slice_uuid}
+
+    def dump(self) -> Dict:
+        return {
+            'slice_id': self.dump_id(),
+            'slice_subslice_ids': [
+                slice_subslice.subslice.dump_id()
+                for slice_subslice in self.slice_subslices
+            ]
+        }
+
+class SliceSubSliceModel(_Base):
+    __tablename__ = 'slice_subslice'
+
+    slice_uuid    = Column(ForeignKey('slice.slice_uuid', ondelete='CASCADE' ), primary_key=True)
+    subslice_uuid = Column(ForeignKey('slice.slice_uuid', ondelete='RESTRICT'), primary_key=True)
+
+    slice    = relationship('SliceModel', foreign_keys='SliceSubSliceModel.slice_uuid', back_populates='slice_subslices', lazy='joined')
+    subslice = relationship('SliceModel', foreign_keys='SliceSubSliceModel.subslice_uuid', lazy='joined')
+
+def main():
+    engine = sqlalchemy.create_engine('sqlite:///:memory:', echo=False, future=True)
+    event.listen(engine, 'connect', _fk_pragma_on_connect)
+
+    _Base.metadata.create_all(engine)
+
+    slice_data = [
+        {'slice_uuid': 'slice-01'},
+        {'slice_uuid': 'slice-01-01'},
+        {'slice_uuid': 'slice-01-02'},
+    ]
+
+    slice_subslices_data = [
+        {'slice_uuid': 'slice-01', 'subslice_uuid': 'slice-01-01'},
+        {'slice_uuid': 'slice-01', 'subslice_uuid': 'slice-01-02'},
+    ]
+
+    # insert
+    with engine.connect() as conn:
+        conn.execute(insert(SliceModel).values(slice_data))
+        conn.execute(insert(SliceSubSliceModel).values(slice_subslices_data))
+        conn.commit()
+
+    # read
+    with Session(engine) as session:
+        obj_list = session.query(SliceModel).all()
+        print([obj.dump() for obj in obj_list])
+        session.commit()
+
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
+
+[
+    {'slice_id': {'uuid': 'slice-01'}, 'slice_subslice_ids': [
+        {'uuid': 'slice-01-01'},
+        {'uuid': 'slice-01-02'}
+    ]},
+    {'slice_id': {'uuid': 'slice-01-01'}, 'slice_subslice_ids': []},
+    {'slice_id': {'uuid': 'slice-01-02'}, 'slice_subslice_ids': []}
+]
-- 
GitLab


From f6315c3cb2090cc7fec08ec2985eb11265331a0a Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 16:55:09 +0000
Subject: [PATCH 096/229] Slice Component:

- Added logic to manage endpoints, constraints and config rules in Slice Grouping
---
 src/slice/service/slice_grouper/Tools.py | 46 ++++++++++++++++++------
 1 file changed, 35 insertions(+), 11 deletions(-)

diff --git a/src/slice/service/slice_grouper/Tools.py b/src/slice/service/slice_grouper/Tools.py
index 12337cf8e..ca957f3c7 100644
--- a/src/slice/service/slice_grouper/Tools.py
+++ b/src/slice/service/slice_grouper/Tools.py
@@ -115,11 +115,25 @@ def add_slice_to_group(slice_obj : Slice, selected_group : Tuple[str, float, flo
     if slice_group_obj is None:
         raise NotFoundException('Slice', group_name, extra_details='while adding to group')
 
-    for subslice_id in slice_group_obj.slice_subslice_ids:
-        if subslice_id == slice_obj.slice_id: break # already added
-    else:
-        slice_group_obj.slice_subslice_ids.add().CopyFrom(slice_obj.slice_id)
-        # TODO: add other logic, such as re-configure parent slice
+    del slice_group_obj.slice_endpoint_ids[:]
+    for endpoint_id in slice_obj.slice_endpoint_ids:
+        slice_group_obj.slice_endpoint_ids.add().CopyFrom(endpoint_id)
+
+    del slice_group_obj.slice_constraints[:]
+    del slice_group_obj.slice_service_ids[:]
+
+    del slice_group_obj.slice_subslice_ids[:]
+    slice_group_obj.slice_subslice_ids.add().CopyFrom(slice_obj.slice_id)
+
+    del slice_group_obj.slice_config.config_rules[:]
+    for config_rule in slice_obj.slice_config.config_rules:
+        group_config_rule = slice_group_obj.slice_config.config_rules.add()
+        group_config_rule.CopyFrom(config_rule)
+        if config_rule.WhichOneof('config_rule') != 'custom': continue
+        TEMPLATE = '/subslice[{:s}]{:s}'
+        slice_resource_key = config_rule.custom.resource_key
+        group_resource_key = TEMPLATE.format(slice_uuid, slice_resource_key)
+        group_config_rule.custom.resource_key = group_resource_key
 
     context_client.SetSlice(slice_group_obj)
 
@@ -139,13 +153,23 @@ def remove_slice_from_group(slice_obj : Slice, selected_group : Tuple[str, float
         raise NotFoundException('Slice', group_name, extra_details='while removing from group')
 
     if slice_obj.slice_id in slice_group_obj.slice_subslice_ids:
-        slice_group_obj.slice_subslice_ids.remove(slice_obj.slice_id)
-        # TODO: other logic, such as deconfigure parent slice
-
         tmp_slice_group_obj = Slice()
-        tmp_slice_group_obj.slice_id.CopyFrom(slice_group_obj.slice_id) # pylint: disable=no-member
-        slice_subslice_id = tmp_slice_group_obj.slice_subslice_ids.add() # pylint: disable=no-member
-        slice_subslice_id.CopyFrom(slice_obj.slice_id)
+        tmp_slice_group_obj.slice_id.CopyFrom(slice_group_obj.slice_id)             # pylint: disable=no-member
+
+        tmp_slice_group_obj.slice_subslice_ids.add().CopyFrom(slice_obj.slice_id)   # pylint: disable=no-member
+
+        for endpoint_id in slice_obj.slice_endpoint_ids:
+            tmp_slice_group_obj.slice_endpoint_ids.add().CopyFrom(endpoint_id)      # pylint: disable=no-member
+
+        for config_rule in slice_obj.slice_config.config_rules:
+            group_config_rule = tmp_slice_group_obj.slice_config.config_rules.add() # pylint: disable=no-member
+            group_config_rule.CopyFrom(config_rule)
+            if group_config_rule.WhichOneof('config_rule') != 'custom': continue
+            TEMPLATE = '/subslice[{:s}]{:s}'
+            slice_resource_key = group_config_rule.custom.resource_key
+            group_resource_key = TEMPLATE.format(slice_uuid, slice_resource_key)
+            group_config_rule.custom.resource_key = group_resource_key
+
         context_client.UnsetSlice(tmp_slice_group_obj)
 
     metrics_exporter = MetricsExporter()
-- 
GitLab


From 13d9c046d7eb4ad4dde1f6e53aa88337f0f50c3c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 17:26:17 +0000
Subject: [PATCH 097/229] Device component:

- Added missing special resource key
---
 src/device/service/driver_api/_Driver.py | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/device/service/driver_api/_Driver.py b/src/device/service/driver_api/_Driver.py
index cc9f7a2c6..947bc8570 100644
--- a/src/device/service/driver_api/_Driver.py
+++ b/src/device/service/driver_api/_Driver.py
@@ -22,6 +22,7 @@ RESOURCE_ENDPOINTS = '__endpoints__'
 RESOURCE_INTERFACES = '__interfaces__'
 RESOURCE_NETWORK_INSTANCES = '__network_instances__'
 RESOURCE_ROUTING_POLICIES = '__routing_policies__'
+RESOURCE_SERVICES = '__services__'
 RESOURCE_ACL = '__acl__'
 
 
-- 
GitLab


From 7e2ca0af3dffcc1d2fdccbee39d8b77d7b8f78e2 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 17:26:45 +0000
Subject: [PATCH 098/229] Device component - IETF L2VPN Driver:

- added pseudocode
- backup WORK IN PROGRESS
---
 .../drivers/ietf_l2vpn/IetfL2VpnDriver.py     | 96 ++++++++++++-------
 .../service/drivers/ietf_l2vpn/MockOSM.py     | 62 ------------
 .../ietf_l2vpn/WimconnectorIETFL2VPN.py       |  4 +-
 .../service/drivers/ietf_l2vpn/__init__.py    | 14 ---
 4 files changed, 63 insertions(+), 113 deletions(-)
 delete mode 100644 src/device/service/drivers/ietf_l2vpn/MockOSM.py

diff --git a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
index 3823f569b..609221963 100644
--- a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
+++ b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
@@ -12,17 +12,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import logging, requests, threading
-from requests.auth import HTTPBasicAuth
+import logging, threading
 from typing import Any, Iterator, List, Optional, Tuple, Union
 from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
 from common.type_checkers.Checkers import chk_string, chk_type
-from device.service.driver_api._Driver import _Driver
-from . import ALL_RESOURCE_KEYS
-from .Tools import create_connectivity_service, find_key, config_getter, delete_connectivity_service
+from device.service.driver_api._Driver import _Driver, RESOURCE_ENDPOINTS, RESOURCE_SERVICES
+from .Tools import find_key
+from .WimconnectorIETFL2VPN import WimconnectorIETFL2VPN
 
 LOGGER = logging.getLogger(__name__)
 
+ALL_RESOURCE_KEYS = [
+    RESOURCE_ENDPOINTS,
+    RESOURCE_SERVICES,
+]
+
 METRICS_POOL = MetricsPool('Device', 'Driver', labels={'driver': 'ietf_l2vpn'})
 
 class IetfL2VpnDriver(_Driver):
@@ -32,20 +36,17 @@ class IetfL2VpnDriver(_Driver):
         self.__terminate = threading.Event()
         username = settings.get('username')
         password = settings.get('password')
-        self.__auth = HTTPBasicAuth(username, password) if username is not None and password is not None else None
         scheme = settings.get('scheme', 'http')
-        self.__tapi_root = '{:s}://{:s}:{:d}'.format(scheme, address, int(port))
-        self.__timeout = int(settings.get('timeout', 120))
+        wim = {'wim_url': '{:s}://{:s}:{:d}'.format(scheme, address, int(port))}
+        wim_account = {'user': username, 'password': password}
+        config = {'mapping_not_needed': False, 'service_endpoint_mapping': mapping}
+        self.wim = WimconnectorIETFL2VPN(wim, wim_account, config=config)
+        self.conn_info = {} # internal database emulating OSM storage provided to WIM Connectors
 
     def Connect(self) -> bool:
-        url = self.__tapi_root + '/restconf/data/tapi-common:context'
         with self.__lock:
-            if self.__started.is_set(): return True
             try:
-                requests.get(url, timeout=self.__timeout, verify=False, auth=self.__auth)
-            except requests.exceptions.Timeout:
-                LOGGER.exception('Timeout connecting {:s}'.format(str(self.__tapi_root)))
-                return False
+                self.wim.check_credentials()
             except Exception:  # pylint: disable=broad-except
                 LOGGER.exception('Exception connecting {:s}'.format(str(self.__tapi_root)))
                 return False
@@ -68,36 +69,53 @@ class IetfL2VpnDriver(_Driver):
         chk_type('resources', resource_keys, list)
         results = []
         with self.__lock:
+            self.wim.check_credentials()
             if len(resource_keys) == 0: resource_keys = ALL_RESOURCE_KEYS
             for i, resource_key in enumerate(resource_keys):
                 str_resource_name = 'resource_key[#{:d}]'.format(i)
                 chk_string(str_resource_name, resource_key, allow_empty=False)
-                results.extend(config_getter(
-                    self.__tapi_root, resource_key, timeout=self.__timeout, auth=self.__auth))
+
+                if resource_key == RESOURCE_ENDPOINTS:
+                    # return endpoints through debug-api and list-devices method
+                    endpoints = self.debug_api.get_endpoints()
+                    for endpoint in endpoints: results.append(process_endpoint(endpoint))
+                elif resource_key == RESOURCE_SERVICES:
+                    # return all services through 
+                    services = self.wim.get_all_active_connectivity_services()
+                    for service in services: results.append(process_service(service))
+                else:
+                    # assume single-service retrieval
+                    service = self.wim.get_connectivity_service()
+                    results.append(process_service(service))
         return results
 
     @metered_subclass_method(METRICS_POOL)
     def SetConfig(self, resources: List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
         results = []
-        if len(resources) == 0:
-            return results
+        if len(resources) == 0: return results
         with self.__lock:
+            self.wim.check_credentials()
             for resource in resources:
                 LOGGER.info('resource = {:s}'.format(str(resource)))
 
-                input_sip = find_key(resource, 'input_sip')
-                output_sip = find_key(resource, 'output_sip')
                 uuid = find_key(resource, 'uuid')
-                capacity_value = find_key(resource, 'capacity_value')
-                capacity_unit = find_key(resource, 'capacity_unit')
-                layer_protocol_name = find_key(resource, 'layer_protocol_name')
-                layer_protocol_qualifier = find_key(resource, 'layer_protocol_qualifier')
-                direction = find_key(resource, 'direction')
-
-                data = create_connectivity_service(
-                    self.__tapi_root, uuid, input_sip, output_sip, direction, capacity_value, capacity_unit,
-                    layer_protocol_name, layer_protocol_qualifier, timeout=self.__timeout, auth=self.__auth)
-                results.extend(data)
+                #input_sip = find_key(resource, 'input_sip')
+                #output_sip = find_key(resource, 'output_sip')
+                #capacity_value = find_key(resource, 'capacity_value')
+                #capacity_unit = find_key(resource, 'capacity_unit')
+                #layer_protocol_name = find_key(resource, 'layer_protocol_name')
+                #layer_protocol_qualifier = find_key(resource, 'layer_protocol_qualifier')
+                #direction = find_key(resource, 'direction')
+
+                result = self.wim.get_connectivity_service_status(
+                    service_uuid, conn_info=conn_info)
+                if service_exists(result):
+                    result = self.wim.create_connectivity_service(
+                        service_type, connection_points)
+                else:
+                    result = self.wim.edit_connectivity_service(
+                        service_uuid, conn_info=conn_info, connection_points=connection_points)
+                results.extend(process_result(result))
         return results
 
     @metered_subclass_method(METRICS_POOL)
@@ -105,25 +123,33 @@ class IetfL2VpnDriver(_Driver):
         results = []
         if len(resources) == 0: return results
         with self.__lock:
+            self.wim.check_credentials()
             for resource in resources:
                 LOGGER.info('resource = {:s}'.format(str(resource)))
                 uuid = find_key(resource, 'uuid')
-                results.extend(delete_connectivity_service(
-                    self.__tapi_root, uuid, timeout=self.__timeout, auth=self.__auth))
+
+                result = self.wim.get_connectivity_service_status(
+                    service_uuid, conn_info=conn_info)
+                if service_exists(result):
+                    result = self.wim.delete_connectivity_service(
+                        service_uuid, conn_info=conn_info)
+                else:
+                    result = False
+                results.append(process_result(result))
         return results
 
     @metered_subclass_method(METRICS_POOL)
     def SubscribeState(self, subscriptions : List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]:
-        # TODO: TAPI does not support monitoring by now
+        # TODO: IETF L2VPN does not support monitoring by now
         return [False for _ in subscriptions]
 
     @metered_subclass_method(METRICS_POOL)
     def UnsubscribeState(self, subscriptions : List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]:
-        # TODO: TAPI does not support monitoring by now
+        # TODO: IETF L2VPN does not support monitoring by now
         return [False for _ in subscriptions]
 
     def GetState(
         self, blocking=False, terminate : Optional[threading.Event] = None
     ) -> Iterator[Tuple[float, str, Any]]:
-        # TODO: TAPI does not support monitoring by now
+        # TODO: IETF L2VPN does not support monitoring by now
         return []
diff --git a/src/device/service/drivers/ietf_l2vpn/MockOSM.py b/src/device/service/drivers/ietf_l2vpn/MockOSM.py
deleted file mode 100644
index 338db0e19..000000000
--- a/src/device/service/drivers/ietf_l2vpn/MockOSM.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import logging
-from .WimconnectorIETFL2VPN import WimconnectorIETFL2VPN
-
-LOGGER = logging.getLogger(__name__)
-
-class MockOSM:
-    def __init__(self, url, mapping, username, password):
-        wim = {'wim_url': url}
-        wim_account = {'user': username, 'password': password}
-        config = {'mapping_not_needed': False, 'service_endpoint_mapping': mapping}
-        self.wim = WimconnectorIETFL2VPN(wim, wim_account, config=config)
-        self.conn_info = {} # internal database emulating OSM storage provided to WIM Connectors
-
-    def create_connectivity_service(self, service_type, connection_points):
-        LOGGER.info('[create_connectivity_service] service_type={:s}'.format(str(service_type)))
-        LOGGER.info('[create_connectivity_service] connection_points={:s}'.format(str(connection_points)))
-        self.wim.check_credentials()
-        result = self.wim.create_connectivity_service(service_type, connection_points)
-        LOGGER.info('[create_connectivity_service] result={:s}'.format(str(result)))
-        service_uuid, conn_info = result
-        self.conn_info[service_uuid] = conn_info
-        return service_uuid
-
-    def get_connectivity_service_status(self, service_uuid):
-        LOGGER.info('[get_connectivity_service] service_uuid={:s}'.format(str(service_uuid)))
-        conn_info = self.conn_info.get(service_uuid)
-        if conn_info is None: raise Exception('ServiceId({:s}) not found'.format(str(service_uuid)))
-        LOGGER.info('[get_connectivity_service] conn_info={:s}'.format(str(conn_info)))
-        self.wim.check_credentials()
-        result = self.wim.get_connectivity_service_status(service_uuid, conn_info=conn_info)
-        LOGGER.info('[get_connectivity_service] result={:s}'.format(str(result)))
-        return result
-
-    def edit_connectivity_service(self, service_uuid, connection_points):
-        LOGGER.info('[edit_connectivity_service] service_uuid={:s}'.format(str(service_uuid)))
-        LOGGER.info('[edit_connectivity_service] connection_points={:s}'.format(str(connection_points)))
-        conn_info = self.conn_info.get(service_uuid)
-        if conn_info is None: raise Exception('ServiceId({:s}) not found'.format(str(service_uuid)))
-        LOGGER.info('[edit_connectivity_service] conn_info={:s}'.format(str(conn_info)))
-        self.wim.edit_connectivity_service(service_uuid, conn_info=conn_info, connection_points=connection_points)
-
-    def delete_connectivity_service(self, service_uuid):
-        LOGGER.info('[delete_connectivity_service] service_uuid={:s}'.format(str(service_uuid)))
-        conn_info = self.conn_info.get(service_uuid)
-        if conn_info is None: raise Exception('ServiceId({:s}) not found'.format(str(service_uuid)))
-        LOGGER.info('[delete_connectivity_service] conn_info={:s}'.format(str(conn_info)))
-        self.wim.check_credentials()
-        self.wim.delete_connectivity_service(service_uuid, conn_info=conn_info)
diff --git a/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py b/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
index aa4ca045f..b3721b2d5 100644
--- a/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
+++ b/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
@@ -55,9 +55,9 @@ class WimconnectorIETFL2VPN(SdnConnectorBase):
             m["service_endpoint_id"]: m for m in self.service_endpoint_mapping
         }
         self.user = wim_account.get("user")
-        self.passwd = wim_account.get("password")           # replace "passwordd" -> "password"
+        self.passwd = wim_account.get("password")
 
-        if self.user and self.passwd is not None:
+        if self.user is not None and self.passwd is not None:
             self.auth = (self.user, self.passwd)
         else:
             self.auth = None
diff --git a/src/device/service/drivers/ietf_l2vpn/__init__.py b/src/device/service/drivers/ietf_l2vpn/__init__.py
index 2d3f6df32..38d04994f 100644
--- a/src/device/service/drivers/ietf_l2vpn/__init__.py
+++ b/src/device/service/drivers/ietf_l2vpn/__init__.py
@@ -11,17 +11,3 @@
 # WITHOUT 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 device.service.driver_api._Driver import RESOURCE_ENDPOINTS, RESOURCE_INTERFACES, RESOURCE_NETWORK_INSTANCES
-
-ALL_RESOURCE_KEYS = [
-    RESOURCE_ENDPOINTS,
-    RESOURCE_INTERFACES,
-    RESOURCE_NETWORK_INSTANCES,
-]
-
-RESOURCE_KEY_MAPPINGS = {
-    RESOURCE_ENDPOINTS        : 'component',
-    RESOURCE_INTERFACES       : 'interface',
-    RESOURCE_NETWORK_INSTANCES: 'network_instance',
-}
-- 
GitLab


From 870329f2de0e0110e265a753ef5cb270c09333dd Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 17:44:34 +0000
Subject: [PATCH 099/229] Context component:

- Corrected method UnsetSlice to remove constraints
---
 src/context/service/database/Constraint.py | 26 ++++++++++------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/src/context/service/database/Constraint.py b/src/context/service/database/Constraint.py
index 5ebe36f99..3a73f6589 100644
--- a/src/context/service/database/Constraint.py
+++ b/src/context/service/database/Constraint.py
@@ -86,26 +86,24 @@ def upsert_constraints(
 ) -> bool:
     uuids_to_upsert : Dict[str, int] = dict()
     rules_to_upsert : List[Dict] = list()
-    if not is_delete:
-        for constraint in constraints:
-            constraint_uuid = constraint['constraint_uuid']
-            position = uuids_to_upsert.get(constraint_uuid)
-            if position is None:
-                # if not added, add it
-                rules_to_upsert.append(constraint)
-                uuids_to_upsert[constraint_uuid] = len(rules_to_upsert) - 1
-            else:
-                # if already added, update occurrence
-                rules_to_upsert[position] = constraint
+    for constraint in constraints:
+        constraint_uuid = constraint['constraint_uuid']
+        position = uuids_to_upsert.get(constraint_uuid)
+        if position is None:
+            # if not added, add it
+            rules_to_upsert.append(constraint)
+            uuids_to_upsert[constraint_uuid] = len(rules_to_upsert) - 1
+        else:
+            # if already added, update occurrence
+            rules_to_upsert[position] = constraint
 
     # Delete all constraints not in uuids_to_upsert
     delete_affected = False
-    if is_delete or len(uuids_to_upsert) > 0:
+    if len(uuids_to_upsert) > 0:
         stmt = delete(ConstraintModel)
         if service_uuid is not None: stmt = stmt.where(ConstraintModel.service_uuid == service_uuid)
         if slice_uuid   is not None: stmt = stmt.where(ConstraintModel.slice_uuid   == slice_uuid  )
-        if not is_delete:
-            stmt = stmt.where(ConstraintModel.constraint_uuid.not_in(set(uuids_to_upsert.keys())))
+        stmt = stmt.where(ConstraintModel.constraint_uuid.not_in(set(uuids_to_upsert.keys())))
         #str_stmt = stmt.compile(dialect=postgresql.dialect(), compile_kwargs={"literal_binds": True})
         #LOGGER.warning('delete stmt={:s}'.format(str(str_stmt)))
         constraint_deletes = session.execute(stmt)
-- 
GitLab


From dd6cc334f8b63898052a864dfa43861e7470848d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 17:46:51 +0000
Subject: [PATCH 100/229] Load Generator component:

- Extracted constant MAX_WORKER_THREADS
- Rounded SLA values to 2 decimal digits
---
 src/load_generator/load_gen/Constants.py       |  2 ++
 .../load_gen/RequestGenerator.py               | 18 +++++++++---------
 .../load_gen/RequestScheduler.py               |  3 ++-
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/load_generator/load_gen/Constants.py b/src/load_generator/load_gen/Constants.py
index b71dd9a35..9ae3cdc12 100644
--- a/src/load_generator/load_gen/Constants.py
+++ b/src/load_generator/load_gen/Constants.py
@@ -26,3 +26,5 @@ ENDPOINT_COMPATIBILITY = {
     'PHOTONIC_MEDIA:FLEX:G_6_25GHZ:INPUT': 'PHOTONIC_MEDIA:FLEX:G_6_25GHZ:OUTPUT',
     'PHOTONIC_MEDIA:DWDM:G_50GHZ:INPUT'  : 'PHOTONIC_MEDIA:DWDM:G_50GHZ:OUTPUT',
 }
+
+MAX_WORKER_THREADS = 10
\ No newline at end of file
diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index a6d14307e..0ada285bc 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -230,9 +230,9 @@ class RequestGenerator:
         ]
 
         if request_type == RequestType.SERVICE_L2NM:
-            availability  = int(random.uniform(00.0, 99.99) * 100.0) / 100.0
-            capacity_gbps = int(random.uniform(0.1, 100.0) * 100.0) / 100.0
-            e2e_latency_ms = int(random.uniform(5.0, 100.0) * 100.0) / 100.0
+            availability   = round(random.uniform(0.0,  99.99), ndigits=2)
+            capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
+            e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
 
             constraints = [
                 json_constraint_sla_availability(1, True, availability),
@@ -275,9 +275,9 @@ class RequestGenerator:
                 request_uuid, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules)
 
         elif request_type == RequestType.SERVICE_L3NM:
-            availability  = int(random.uniform(00.0, 99.99) * 100.0) / 100.0
-            capacity_gbps = int(random.uniform(0.1, 100.0) * 100.0) / 100.0
-            e2e_latency_ms = int(random.uniform(5.0, 100.0) * 100.0) / 100.0
+            availability   = round(random.uniform(0.0,  99.99), ndigits=2)
+            capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
+            e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
 
             constraints = [
                 json_constraint_sla_availability(1, True, availability),
@@ -380,9 +380,9 @@ class RequestGenerator:
             json_endpoint_id(json_device_id(dst_device_uuid), dst_endpoint_uuid),
         ]
 
-        availability  = int(random.uniform(00.0, 99.99) * 100.0) / 100.0
-        capacity_gbps = int(random.uniform(0.1, 100.0) * 100.0) / 100.0
-        e2e_latency_ms = int(random.uniform(5.0, 100.0) * 100.0) / 100.0
+        availability   = round(random.uniform(0.0,  99.99), ndigits=2)
+        capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
+        e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
         constraints = [
             json_constraint_sla_availability(1, True, availability),
             json_constraint_sla_capacity(capacity_gbps),
diff --git a/src/load_generator/load_gen/RequestScheduler.py b/src/load_generator/load_gen/RequestScheduler.py
index 57afe80be..773a37eac 100644
--- a/src/load_generator/load_gen/RequestScheduler.py
+++ b/src/load_generator/load_gen/RequestScheduler.py
@@ -21,6 +21,7 @@ from typing import Dict, Optional
 from common.proto.context_pb2 import Service, ServiceId, Slice, SliceId
 from service.client.ServiceClient import ServiceClient
 from slice.client.SliceClient import SliceClient
+from .Constants import MAX_WORKER_THREADS
 from .DltTools import explore_entities_to_record, record_entities
 from .Parameters import Parameters
 from .RequestGenerator import RequestGenerator
@@ -37,7 +38,7 @@ class RequestScheduler:
         self._scheduler = scheduler_class()
         self._scheduler.configure(
             jobstores = {'default': MemoryJobStore()},
-            executors = {'default': ThreadPoolExecutor(max_workers=10)},
+            executors = {'default': ThreadPoolExecutor(max_workers=MAX_WORKER_THREADS)},
             job_defaults = {
                 'coalesce': False,
                 'max_instances': 100,
-- 
GitLab


From 3091a5724c9f6f81d6445cb5706244d8a3df11a8 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 17:47:06 +0000
Subject: [PATCH 101/229] WebUI component:

- Rounded SLA values to 2 decimal digits
---
 src/webui/service/__init__.py                   | 1 +
 src/webui/service/templates/service/detail.html | 4 ++--
 src/webui/service/templates/slice/detail.html   | 4 ++--
 3 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/webui/service/__init__.py b/src/webui/service/__init__.py
index ef5253b87..fca107141 100644
--- a/src/webui/service/__init__.py
+++ b/src/webui/service/__init__.py
@@ -98,6 +98,7 @@ def create_app(use_config=None, web_app_root=None):
     app.jinja_env.globals.update({              # pylint: disable=no-member
         'enumerate'           : enumerate,
         'json_to_list'        : json_to_list,
+        'round'               : round,
         'get_working_context' : get_working_context,
         'get_working_topology': get_working_topology,
     })
diff --git a/src/webui/service/templates/service/detail.html b/src/webui/service/templates/service/detail.html
index b267f986c..1cc115a9b 100644
--- a/src/webui/service/templates/service/detail.html
+++ b/src/webui/service/templates/service/detail.html
@@ -141,7 +141,7 @@
             <td>SLA Capacity</td>
             <td>-</td>
             <td>
-                {{ constraint.sla_capacity.capacity_gbps }} Gbps
+                {{ round(constraint.sla_capacity.capacity_gbps, ndigits=2) }} Gbps
             </td>
         </tr>
         {% elif constraint.WhichOneof('constraint')=='sla_latency' %}
@@ -149,7 +149,7 @@
             <td>SLA E2E Latency</td>
             <td>-</td>
             <td>
-                {{ constraint.sla_latency.e2e_latency_ms }} ms
+                {{ round(constraint.sla_latency.e2e_latency_ms, ndigits=2) }} ms
             </td>
         </tr>
         {% elif constraint.WhichOneof('constraint')=='sla_availability' %}
diff --git a/src/webui/service/templates/slice/detail.html b/src/webui/service/templates/slice/detail.html
index 2c1b55afb..f2adff751 100644
--- a/src/webui/service/templates/slice/detail.html
+++ b/src/webui/service/templates/slice/detail.html
@@ -141,7 +141,7 @@
             <td>SLA Capacity</td>
             <td>-</td>
             <td>
-                {{ constraint.sla_capacity.capacity_gbps }} Gbps
+                {{ round(constraint.sla_capacity.capacity_gbps, ndigits=2) }} Gbps
             </td>
         </tr>
         {% elif constraint.WhichOneof('constraint')=='sla_latency' %}
@@ -149,7 +149,7 @@
             <td>SLA E2E Latency</td>
             <td>-</td>
             <td>
-                {{ constraint.sla_latency.e2e_latency_ms }} ms
+                {{ round(constraint.sla_latency.e2e_latency_ms, ndigits=2) }} ms
             </td>
         </tr>
         {% elif constraint.WhichOneof('constraint')=='sla_availability' %}
-- 
GitLab


From 96d5f39d7d777b92fbdc7434ae105ac4d5ad488a Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 20 Feb 2023 18:15:14 +0000
Subject: [PATCH 102/229] WebUI component:

- Reduced number of digits to 2 in SLA values
---
 src/webui/service/templates/service/detail.html | 2 +-
 src/webui/service/templates/slice/detail.html   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/webui/service/templates/service/detail.html b/src/webui/service/templates/service/detail.html
index e17b8539f..7d3c72a80 100644
--- a/src/webui/service/templates/service/detail.html
+++ b/src/webui/service/templates/service/detail.html
@@ -157,7 +157,7 @@
             <td>SLA Availability</td>
             <td>-</td>
             <td>
-                {{ constraint.sla_availability.availability }} %;
+                {{ round(constraint.sla_availability.availability, ndigits=2) }} %;
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
                 {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
diff --git a/src/webui/service/templates/slice/detail.html b/src/webui/service/templates/slice/detail.html
index 0c11744cb..6c35e6b50 100644
--- a/src/webui/service/templates/slice/detail.html
+++ b/src/webui/service/templates/slice/detail.html
@@ -157,7 +157,7 @@
             <td>SLA Availability</td>
             <td>-</td>
             <td>
-                {{ constraint.sla_availability.availability }} %;
+                {{ round(constraint.sla_availability.availability, ndigits=2) }} %;
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
                 {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
-- 
GitLab


From 31a95a521b93db92034a4ebec21d21cceb3cf597 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Juan=20Pedre=C3=B1o=20Manresa?=
 <jpedrenomanresa@adva.com>
Date: Tue, 21 Feb 2023 08:31:14 +0000
Subject: [PATCH 103/229] Implementation of NBI for IETF Network Slices
 Addition of bindings for YANG "IETF Slice Service" data model parsing
 Refactoring of subfolder "tools"

---
 .../nbi_plugins/ietf_l2vpn/L2VPN_Service.py   |   4 +-
 .../ietf_network_slice/NSS_Service.py         |  61 +-
 .../ietf_network_slice/NSS_Services.py        |  93 +++-
 .../ietf_network_slice/bindings/__init__.py   | 521 ++++++++++++++++++
 .../bindings/nacm/__init__.py                 | 127 +++++
 .../bindings/nacm/groups/__init__.py          |  72 +++
 .../bindings/nacm/groups/group/__init__.py    |  82 +++
 .../bindings/nacm/rule_list/__init__.py       |  89 +++
 .../bindings/nacm/rule_list/rule/__init__.py  | 116 ++++
 .../nacm/rule_list/rule/rule_type/__init__.py | 116 ++++
 .../rule/rule_type/data_node/__init__.py      |  71 +++
 .../rule/rule_type/notification/__init__.py   |  71 +++
 .../rule_type/protocol_operation/__init__.py  |  71 +++
 .../network_slice_services/__init__.py        |  79 +++
 .../slice_service/__init__.py                 | 133 +++++
 .../connection_groups/__init__.py             |  72 +++
 .../connection_group/__init__.py              | 118 ++++
 .../connection_group_monitoring/__init__.py   | 113 ++++
 .../connectivity_construct/__init__.py        | 115 ++++
 .../__init__.py                               | 113 ++++
 .../connectivity_construct_type/__init__.py   | 116 ++++
 .../a2a/__init__.py                           |  72 +++
 .../a2a/a2a_sdp/__init__.py                   |  92 ++++
 .../a2a/a2a_sdp/slo_sle_policy/__init__.py    |  87 +++
 .../a2a_sdp/slo_sle_policy/custom/__init__.py |  72 +++
 .../custom/service_slo_sle_policy/__init__.py | 103 ++++
 .../metric_bounds/__init__.py                 |  72 +++
 .../metric_bounds/metric_bound/__init__.py    | 100 ++++
 .../steering_constraints/__init__.py          |  79 +++
 .../path_constraints/__init__.py              |  65 +++
 .../service_function/__init__.py              |  65 +++
 .../slo_sle_policy/standard/__init__.py       |  71 +++
 .../p2mp/__init__.py                          |  71 +++
 .../p2p/__init__.py                           |  77 +++
 .../slo_sle_policy/__init__.py                |  87 +++
 .../slo_sle_policy/custom/__init__.py         |  72 +++
 .../custom/service_slo_sle_policy/__init__.py | 103 ++++
 .../metric_bounds/__init__.py                 |  72 +++
 .../metric_bounds/metric_bound/__init__.py    | 100 ++++
 .../steering_constraints/__init__.py          |  79 +++
 .../path_constraints/__init__.py              |  65 +++
 .../service_function/__init__.py              |  65 +++
 .../slo_sle_policy/standard/__init__.py       |  71 +++
 .../slo_sle_policy/__init__.py                |  87 +++
 .../slo_sle_policy/custom/__init__.py         |  72 +++
 .../custom/service_slo_sle_policy/__init__.py | 103 ++++
 .../metric_bounds/__init__.py                 |  72 +++
 .../metric_bounds/metric_bound/__init__.py    | 100 ++++
 .../steering_constraints/__init__.py          |  79 +++
 .../path_constraints/__init__.py              |  65 +++
 .../service_function/__init__.py              |  65 +++
 .../slo_sle_policy/standard/__init__.py       |  71 +++
 .../slice_service/sdps/__init__.py            |  72 +++
 .../slice_service/sdps/sdp/__init__.py        | 168 ++++++
 .../sdps/sdp/attachment_circuits/__init__.py  |  72 +++
 .../attachment_circuit/__init__.py            | 152 +++++
 .../attachment_circuit/ac_tags/__init__.py    |  79 +++
 .../ac_tags/ac_tag_opaque/__init__.py         |  82 +++
 .../ac_tags/ac_tags/__init__.py               |  82 +++
 .../incoming_qos_policy/__init__.py           |  78 +++
 .../rate_limits/__init__.py                   | 101 ++++
 .../outgoing_qos_policy/__init__.py           |  78 +++
 .../rate_limits/__init__.py                   | 101 ++++
 .../sdp_peering/__init__.py                   |  79 +++
 .../sdp_peering/opaque/__init__.py            |  82 +++
 .../sdp_peering/protocol/__init__.py          |  89 +++
 .../protocol/attribute/__init__.py            |  82 +++
 .../sdps/sdp/incoming_qos_policy/__init__.py  |  78 +++
 .../rate_limits/__init__.py                   | 101 ++++
 .../sdps/sdp/location/__init__.py             |  83 +++
 .../sdps/sdp/outgoing_qos_policy/__init__.py  |  78 +++
 .../rate_limits/__init__.py                   | 101 ++++
 .../sdps/sdp/sdp_monitoring/__init__.py       |  89 +++
 .../sdps/sdp/sdp_peering/__init__.py          |  79 +++
 .../sdps/sdp/sdp_peering/opaque/__init__.py   |  82 +++
 .../sdps/sdp/sdp_peering/protocol/__init__.py |  89 +++
 .../protocol/attribute/__init__.py            |  82 +++
 .../sdp/service_match_criteria/__init__.py    |  72 +++
 .../match_criterion/__init__.py               | 106 ++++
 .../slice_service/sdps/sdp/status/__init__.py |  79 +++
 .../sdps/sdp/status/admin_status/__init__.py  |  77 +++
 .../sdps/sdp/status/oper_status/__init__.py   |  77 +++
 .../slice_service/service_tags/__init__.py    |  79 +++
 .../service_tags/tag_opaque/__init__.py       |  82 +++
 .../service_tags/tag_type/__init__.py         |  82 +++
 .../slice_service/slo_sle_policy/__init__.py  |  87 +++
 .../slo_sle_policy/custom/__init__.py         |  72 +++
 .../custom/service_slo_sle_policy/__init__.py | 103 ++++
 .../metric_bounds/__init__.py                 |  72 +++
 .../metric_bounds/metric_bound/__init__.py    | 100 ++++
 .../steering_constraints/__init__.py          |  79 +++
 .../path_constraints/__init__.py              |  65 +++
 .../service_function/__init__.py              |  65 +++
 .../slo_sle_policy/standard/__init__.py       |  71 +++
 .../slice_service/status/__init__.py          |  79 +++
 .../status/admin_status/__init__.py           |  77 +++
 .../status/oper_status/__init__.py            |  77 +++
 .../te_topology_identifier/__init__.py        |  83 +++
 .../slo_sle_templates/__init__.py             |  72 +++
 .../slo_sle_template/__init__.py              | 101 ++++
 .../service_slo_sle_policy/__init__.py        | 103 ++++
 .../metric_bounds/__init__.py                 |  72 +++
 .../metric_bounds/metric_bound/__init__.py    | 100 ++++
 .../steering_constraints/__init__.py          |  79 +++
 .../path_constraints/__init__.py              |  65 +++
 .../service_function/__init__.py              |  65 +++
 .../bindings/networks/__init__.py             |  79 +++
 .../bindings/networks/network/__init__.py     | 124 +++++
 .../networks/network/link/__init__.py         | 110 ++++
 .../network/link/destination/__init__.py      |  77 +++
 .../networks/network/link/source/__init__.py  |  77 +++
 .../network/link/supporting_link/__init__.py  |  89 +++
 .../networks/network/link/te/__init__.py      | 141 +++++
 .../link/te/bundle_stack_level/__init__.py    |  87 +++
 .../te/bundle_stack_level/bundle/__init__.py  |  72 +++
 .../bundle/bundled_links/__init__.py          |  72 +++
 .../bundled_links/bundled_link/__init__.py    |  94 ++++
 .../bundle_stack_level/component/__init__.py  |  72 +++
 .../component/component_links/__init__.py     |  72 +++
 .../component_link/__init__.py                |  94 ++++
 .../te/information_source_entry/__init__.py   | 181 ++++++
 .../information_source_state/__init__.py      |  90 +++
 .../topology/__init__.py                      |  77 +++
 .../__init__.py                               |  96 ++++
 .../max_lsp_bandwidth/__init__.py             |  89 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../label_restrictions/__init__.py            |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../max_link_bandwidth/__init__.py            |  72 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../max_resv_link_bandwidth/__init__.py       |  72 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../te_nsrlgs/__init__.py                     |  65 +++
 .../te_srlgs/__init__.py                      |  65 +++
 .../unreserved_bandwidth/__init__.py          |  89 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../te/information_source_state/__init__.py   |  90 +++
 .../topology/__init__.py                      |  77 +++
 .../network/link/te/recovery/__init__.py      |  77 +++
 .../network/link/te/statistics/__init__.py    | 173 ++++++
 .../link/te/te_link_attributes/__init__.py    | 188 +++++++
 .../external_domain/__init__.py               |  83 +++
 .../__init__.py                               |  96 ++++
 .../max_lsp_bandwidth/__init__.py             |  89 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../label_restrictions/__init__.py            |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../max_link_bandwidth/__init__.py            |  72 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../max_resv_link_bandwidth/__init__.py       |  72 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../te_link_attributes/te_nsrlgs/__init__.py  |  65 +++
 .../te_link_attributes/te_srlgs/__init__.py   |  65 +++
 .../te_link_attributes/underlay/__init__.py   | 105 ++++
 .../underlay/backup_path/__init__.py          |  95 ++++
 .../backup_path/path_element/__init__.py      |  92 ++++
 .../backup_path/path_element/type/__init__.py | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../underlay/primary_path/__init__.py         |  78 +++
 .../primary_path/path_element/__init__.py     |  92 ++++
 .../path_element/type/__init__.py             | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../tunnel_termination_points/__init__.py     |  77 +++
 .../underlay/tunnels/__init__.py              |  78 +++
 .../underlay/tunnels/tunnel/__init__.py       |  88 +++
 .../unreserved_bandwidth/__init__.py          |  89 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../network/link/te/underlay/__init__.py      |  77 +++
 .../network/network_types/__init__.py         |  72 +++
 .../network_types/te_topology/__init__.py     |  65 +++
 .../networks/network/node/__init__.py         | 109 ++++
 .../network/node/supporting_node/__init__.py  |  89 +++
 .../networks/network/node/te/__init__.py      | 131 +++++
 .../network/node/te/geolocation/__init__.py   |  83 +++
 .../te/information_source_entry/__init__.py   | 128 +++++
 .../connectivity_matrices/__init__.py         | 119 ++++
 .../connectivity_matrix/__init__.py           | 130 +++++
 .../connectivity_matrix/from/__init__.py      |  78 +++
 .../from/label_restrictions/__init__.py       |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../optimizations/__init__.py                 |  75 +++
 .../optimizations/algorithm/__init__.py       |  87 +++
 .../algorithm/metric/__init__.py              |  79 +++
 .../metric/optimization_metric/__init__.py    | 102 ++++
 .../__init__.py                               |  72 +++
 .../route_object_exclude_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 203 +++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/srlg/__init__.py                     |  72 +++
 .../type/srlg/srlg/__init__.py                |  71 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../__init__.py                               |  72 +++
 .../route_object_include_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../algorithm/metric/tiebreakers/__init__.py  |  72 +++
 .../metric/tiebreakers/tiebreaker/__init__.py |  82 +++
 .../algorithm/objective_function/__init__.py  |  72 +++
 .../objective_function/__init__.py            |  71 +++
 .../path_constraints/__init__.py              | 137 +++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_metric_bounds/__init__.py            |  72 +++
 .../path_metric_bound/__init__.py             |  88 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../path_constraints/te_bandwidth/__init__.py |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../path_properties/__init__.py               | 107 ++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_properties/path_metric/__init__.py   |  88 +++
 .../path_route_objects/__init__.py            |  72 +++
 .../path_route_object/__init__.py             |  92 ++++
 .../path_route_object/type/__init__.py        | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_route_object/type/label/__init__.py  |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../connectivity_matrix/to/__init__.py        |  78 +++
 .../to/label_restrictions/__init__.py         |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../connectivity_matrix/underlay/__init__.py  | 105 ++++
 .../underlay/backup_path/__init__.py          |  95 ++++
 .../backup_path/path_element/__init__.py      |  92 ++++
 .../backup_path/path_element/type/__init__.py | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../underlay/primary_path/__init__.py         |  78 +++
 .../primary_path/path_element/__init__.py     |  92 ++++
 .../path_element/type/__init__.py             | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../tunnel_termination_points/__init__.py     |  77 +++
 .../underlay/tunnels/__init__.py              |  78 +++
 .../underlay/tunnels/tunnel/__init__.py       |  88 +++
 .../label_restrictions/__init__.py            |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../optimizations/__init__.py                 |  75 +++
 .../optimizations/algorithm/__init__.py       |  87 +++
 .../algorithm/metric/__init__.py              |  79 +++
 .../metric/optimization_metric/__init__.py    | 102 ++++
 .../__init__.py                               |  72 +++
 .../route_object_exclude_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 203 +++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/srlg/__init__.py                     |  72 +++
 .../type/srlg/srlg/__init__.py                |  71 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../__init__.py                               |  72 +++
 .../route_object_include_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../algorithm/metric/tiebreakers/__init__.py  |  72 +++
 .../metric/tiebreakers/tiebreaker/__init__.py |  82 +++
 .../algorithm/objective_function/__init__.py  |  72 +++
 .../objective_function/__init__.py            |  71 +++
 .../path_constraints/__init__.py              | 137 +++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_metric_bounds/__init__.py            |  72 +++
 .../path_metric_bound/__init__.py             |  88 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../path_constraints/te_bandwidth/__init__.py |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../path_properties/__init__.py               | 107 ++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_properties/path_metric/__init__.py   |  88 +++
 .../path_route_objects/__init__.py            |  72 +++
 .../path_route_object/__init__.py             |  92 ++++
 .../path_route_object/type/__init__.py        | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_route_object/type/label/__init__.py  |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../underlay/__init__.py                      | 105 ++++
 .../underlay/backup_path/__init__.py          |  95 ++++
 .../backup_path/path_element/__init__.py      |  92 ++++
 .../backup_path/path_element/type/__init__.py | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../underlay/primary_path/__init__.py         |  78 +++
 .../primary_path/path_element/__init__.py     |  92 ++++
 .../path_element/type/__init__.py             | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../tunnel_termination_points/__init__.py     |  77 +++
 .../underlay/tunnels/__init__.py              |  78 +++
 .../underlay/tunnels/tunnel/__init__.py       |  88 +++
 .../information_source_state/__init__.py      |  90 +++
 .../topology/__init__.py                      |  77 +++
 .../underlay_topology/__init__.py             |  71 +++
 .../te/information_source_state/__init__.py   |  90 +++
 .../topology/__init__.py                      |  77 +++
 .../network/node/te/statistics/__init__.py    |  85 +++
 .../connectivity_matrix_entry/__init__.py     |  95 ++++
 .../node/te/statistics/node/__init__.py       |  95 ++++
 .../node/te/te_node_attributes/__init__.py    | 103 ++++
 .../connectivity_matrices/__init__.py         | 119 ++++
 .../connectivity_matrix/__init__.py           | 130 +++++
 .../connectivity_matrix/from/__init__.py      |  78 +++
 .../from/label_restrictions/__init__.py       |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../optimizations/__init__.py                 |  75 +++
 .../optimizations/algorithm/__init__.py       |  87 +++
 .../algorithm/metric/__init__.py              |  79 +++
 .../metric/optimization_metric/__init__.py    | 102 ++++
 .../__init__.py                               |  72 +++
 .../route_object_exclude_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 203 +++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/srlg/__init__.py                     |  72 +++
 .../type/srlg/srlg/__init__.py                |  71 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../__init__.py                               |  72 +++
 .../route_object_include_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../algorithm/metric/tiebreakers/__init__.py  |  72 +++
 .../metric/tiebreakers/tiebreaker/__init__.py |  82 +++
 .../algorithm/objective_function/__init__.py  |  72 +++
 .../objective_function/__init__.py            |  71 +++
 .../path_constraints/__init__.py              | 137 +++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_metric_bounds/__init__.py            |  72 +++
 .../path_metric_bound/__init__.py             |  88 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../path_constraints/te_bandwidth/__init__.py |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../path_properties/__init__.py               | 107 ++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_properties/path_metric/__init__.py   |  88 +++
 .../path_route_objects/__init__.py            |  72 +++
 .../path_route_object/__init__.py             |  92 ++++
 .../path_route_object/type/__init__.py        | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_route_object/type/label/__init__.py  |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../connectivity_matrix/to/__init__.py        |  78 +++
 .../to/label_restrictions/__init__.py         |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../connectivity_matrix/underlay/__init__.py  | 105 ++++
 .../underlay/backup_path/__init__.py          |  95 ++++
 .../backup_path/path_element/__init__.py      |  92 ++++
 .../backup_path/path_element/type/__init__.py | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../underlay/primary_path/__init__.py         |  78 +++
 .../primary_path/path_element/__init__.py     |  92 ++++
 .../path_element/type/__init__.py             | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../tunnel_termination_points/__init__.py     |  77 +++
 .../underlay/tunnels/__init__.py              |  78 +++
 .../underlay/tunnels/tunnel/__init__.py       |  88 +++
 .../label_restrictions/__init__.py            |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../optimizations/__init__.py                 |  75 +++
 .../optimizations/algorithm/__init__.py       |  87 +++
 .../algorithm/metric/__init__.py              |  79 +++
 .../metric/optimization_metric/__init__.py    | 102 ++++
 .../__init__.py                               |  72 +++
 .../route_object_exclude_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 203 +++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/srlg/__init__.py                     |  72 +++
 .../type/srlg/srlg/__init__.py                |  71 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../__init__.py                               |  72 +++
 .../route_object_include_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../algorithm/metric/tiebreakers/__init__.py  |  72 +++
 .../metric/tiebreakers/tiebreaker/__init__.py |  82 +++
 .../algorithm/objective_function/__init__.py  |  72 +++
 .../objective_function/__init__.py            |  71 +++
 .../path_constraints/__init__.py              | 137 +++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_metric_bounds/__init__.py            |  72 +++
 .../path_metric_bound/__init__.py             |  88 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../path_constraints/te_bandwidth/__init__.py |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../path_properties/__init__.py               | 107 ++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_properties/path_metric/__init__.py   |  88 +++
 .../path_route_objects/__init__.py            |  72 +++
 .../path_route_object/__init__.py             |  92 ++++
 .../path_route_object/type/__init__.py        | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_route_object/type/label/__init__.py  |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../underlay/__init__.py                      | 105 ++++
 .../underlay/backup_path/__init__.py          |  95 ++++
 .../backup_path/path_element/__init__.py      |  92 ++++
 .../backup_path/path_element/type/__init__.py | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../underlay/primary_path/__init__.py         |  78 +++
 .../primary_path/path_element/__init__.py     |  92 ++++
 .../path_element/type/__init__.py             | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../tunnel_termination_points/__init__.py     |  77 +++
 .../underlay/tunnels/__init__.py              |  78 +++
 .../underlay/tunnels/tunnel/__init__.py       |  88 +++
 .../underlay_topology/__init__.py             |  71 +++
 .../te/tunnel_termination_point/__init__.py   | 153 +++++
 .../client_layer_adaptation/__init__.py       |  72 +++
 .../switching_capability/__init__.py          |  96 ++++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../geolocation/__init__.py                   |  83 +++
 .../local_link_connectivities/__init__.py     | 119 ++++
 .../label_restrictions/__init__.py            |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../local_link_connectivity/__init__.py       | 123 +++++
 .../label_restrictions/__init__.py            |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../optimizations/__init__.py                 |  75 +++
 .../optimizations/algorithm/__init__.py       |  87 +++
 .../algorithm/metric/__init__.py              |  79 +++
 .../metric/optimization_metric/__init__.py    | 102 ++++
 .../__init__.py                               |  72 +++
 .../route_object_exclude_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 203 +++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/srlg/__init__.py                     |  72 +++
 .../type/srlg/srlg/__init__.py                |  71 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../__init__.py                               |  72 +++
 .../route_object_include_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../algorithm/metric/tiebreakers/__init__.py  |  72 +++
 .../metric/tiebreakers/tiebreaker/__init__.py |  82 +++
 .../algorithm/objective_function/__init__.py  |  72 +++
 .../objective_function/__init__.py            |  71 +++
 .../path_constraints/__init__.py              | 137 +++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_metric_bounds/__init__.py            |  72 +++
 .../path_metric_bound/__init__.py             |  88 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../path_constraints/te_bandwidth/__init__.py |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../path_properties/__init__.py               | 107 ++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_properties/path_metric/__init__.py   |  88 +++
 .../path_route_objects/__init__.py            |  72 +++
 .../path_route_object/__init__.py             |  92 ++++
 .../path_route_object/type/__init__.py        | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_route_object/type/label/__init__.py  |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../underlay/__init__.py                      | 105 ++++
 .../underlay/backup_path/__init__.py          |  95 ++++
 .../backup_path/path_element/__init__.py      |  92 ++++
 .../backup_path/path_element/type/__init__.py | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../underlay/primary_path/__init__.py         |  78 +++
 .../primary_path/path_element/__init__.py     |  92 ++++
 .../path_element/type/__init__.py             | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../tunnel_termination_points/__init__.py     |  77 +++
 .../underlay/tunnels/__init__.py              |  78 +++
 .../underlay/tunnels/tunnel/__init__.py       |  88 +++
 .../optimizations/__init__.py                 |  75 +++
 .../optimizations/algorithm/__init__.py       |  87 +++
 .../algorithm/metric/__init__.py              |  79 +++
 .../metric/optimization_metric/__init__.py    | 102 ++++
 .../__init__.py                               |  72 +++
 .../route_object_exclude_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 203 +++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/srlg/__init__.py                     |  72 +++
 .../type/srlg/srlg/__init__.py                |  71 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../__init__.py                               |  72 +++
 .../route_object_include_object/__init__.py   |  92 ++++
 .../type/__init__.py                          | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../type/label/__init__.py                    |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../algorithm/metric/tiebreakers/__init__.py  |  72 +++
 .../metric/tiebreakers/tiebreaker/__init__.py |  82 +++
 .../algorithm/objective_function/__init__.py  |  72 +++
 .../objective_function/__init__.py            |  71 +++
 .../path_constraints/__init__.py              | 137 +++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_metric_bounds/__init__.py            |  72 +++
 .../path_metric_bound/__init__.py             |  88 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../path_constraints/te_bandwidth/__init__.py |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../path_properties/__init__.py               | 107 ++++
 .../path_affinities_values/__init__.py        |  72 +++
 .../path_affinities_value/__init__.py         |  88 +++
 .../path_affinity_names/__init__.py           |  72 +++
 .../path_affinity_name/__init__.py            |  89 +++
 .../affinity_name/__init__.py                 |  82 +++
 .../path_properties/path_metric/__init__.py   |  88 +++
 .../path_route_objects/__init__.py            |  72 +++
 .../path_route_object/__init__.py             |  92 ++++
 .../path_route_object/type/__init__.py        | 174 ++++++
 .../type/as_number/__init__.py                |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_route_object/type/label/__init__.py  |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../path_srlgs_lists/__init__.py              |  72 +++
 .../path_srlgs_list/__init__.py               |  82 +++
 .../path_srlgs_names/__init__.py              |  72 +++
 .../path_srlgs_name/__init__.py               |  82 +++
 .../underlay/__init__.py                      | 105 ++++
 .../underlay/backup_path/__init__.py          |  95 ++++
 .../backup_path/path_element/__init__.py      |  92 ++++
 .../backup_path/path_element/type/__init__.py | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../underlay/primary_path/__init__.py         |  78 +++
 .../primary_path/path_element/__init__.py     |  92 ++++
 .../path_element/type/__init__.py             | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../tunnel_termination_points/__init__.py     |  77 +++
 .../underlay/tunnels/__init__.py              |  78 +++
 .../underlay/tunnels/tunnel/__init__.py       |  88 +++
 .../statistics/__init__.py                    |  85 +++
 .../local_link_connectivity/__init__.py       |  95 ++++
 .../tunnel_termination_point/__init__.py      | 119 ++++
 .../__init__.py                               |  89 +++
 .../node/termination_point/__init__.py        | 102 ++++
 .../supporting_termination_point/__init__.py  |  96 ++++
 .../node/termination_point/te/__init__.py     | 103 ++++
 .../te/geolocation/__init__.py                |  83 +++
 .../__init__.py                               |  96 ++++
 .../max_lsp_bandwidth/__init__.py             |  89 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../network/supporting_network/__init__.py    |  82 +++
 .../bindings/networks/network/te/__init__.py  |  97 ++++
 .../network/te/geolocation/__init__.py        |  83 +++
 .../networks/network/te/nsrlg/__init__.py     |  88 +++
 .../te_topology_identifier/__init__.py        |  83 +++
 .../bindings/networks/te/__init__.py          |  72 +++
 .../networks/te/templates/__init__.py         |  79 +++
 .../te/templates/link_template/__init__.py    | 101 ++++
 .../te_link_attributes/__init__.py            | 188 +++++++
 .../external_domain/__init__.py               |  83 +++
 .../__init__.py                               |  96 ++++
 .../max_lsp_bandwidth/__init__.py             |  89 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../label_restrictions/__init__.py            |  72 +++
 .../label_restriction/__init__.py             | 115 ++++
 .../label_restriction/label_end/__init__.py   |  72 +++
 .../label_end/te_label/__init__.py            |  81 +++
 .../label_end/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_start/__init__.py |  72 +++
 .../label_start/te_label/__init__.py          |  81 +++
 .../te_label/technology/__init__.py           |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../label_restriction/label_step/__init__.py  |  75 +++
 .../label_step/technology/__init__.py         |  58 ++
 .../label_step/technology/generic/__init__.py |  71 +++
 .../max_link_bandwidth/__init__.py            |  72 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../max_resv_link_bandwidth/__init__.py       |  72 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../te_link_attributes/te_nsrlgs/__init__.py  |  65 +++
 .../te_link_attributes/te_srlgs/__init__.py   |  65 +++
 .../te_link_attributes/underlay/__init__.py   | 105 ++++
 .../underlay/backup_path/__init__.py          |  95 ++++
 .../backup_path/path_element/__init__.py      |  92 ++++
 .../backup_path/path_element/type/__init__.py | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../underlay/primary_path/__init__.py         |  78 +++
 .../primary_path/path_element/__init__.py     |  92 ++++
 .../path_element/type/__init__.py             | 174 ++++++
 .../path_element/type/as_number/__init__.py   |  72 +++
 .../type/as_number/as_number_hop/__init__.py  |  77 +++
 .../path_element/type/label/__init__.py       |  72 +++
 .../type/label/label_hop/__init__.py          |  72 +++
 .../type/label/label_hop/te_label/__init__.py |  81 +++
 .../label_hop/te_label/technology/__init__.py |  58 ++
 .../te_label/technology/generic/__init__.py   |  71 +++
 .../type/numbered_link_hop/__init__.py        |  72 +++
 .../numbered_link_hop/__init__.py             |  83 +++
 .../type/numbered_node_hop/__init__.py        |  72 +++
 .../numbered_node_hop/__init__.py             |  77 +++
 .../type/unnumbered_link_hop/__init__.py      |  72 +++
 .../unnumbered_link_hop/__init__.py           |  89 +++
 .../tunnel_termination_points/__init__.py     |  77 +++
 .../underlay/tunnels/__init__.py              |  78 +++
 .../underlay/tunnels/tunnel/__init__.py       |  88 +++
 .../unreserved_bandwidth/__init__.py          |  89 +++
 .../te_bandwidth/__init__.py                  |  75 +++
 .../te_bandwidth/technology/__init__.py       |  58 ++
 .../technology/generic/__init__.py            |  71 +++
 .../te/templates/node_template/__init__.py    | 101 ++++
 .../te_node_attributes/__init__.py            |  96 ++++
 .../underlay_topology/__init__.py             |  71 +++
 1182 files changed, 96924 insertions(+), 29 deletions(-)
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/group/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/destination/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/source/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py

diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py
index 2db231221..f12c4526a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_Service.py
@@ -20,8 +20,8 @@ from common.proto.context_pb2 import SliceStatusEnum
 from common.tools.context_queries.Slice import get_slice
 from context.client.ContextClient import ContextClient
 from slice.client.SliceClient import SliceClient
-from .tools.Authentication import HTTP_AUTH
-from .tools.HttpStatusCodes import HTTP_GATEWAYTIMEOUT, HTTP_NOCONTENT, HTTP_OK, HTTP_SERVERERROR
+from ..tools.Authentication import HTTP_AUTH
+from ..tools.HttpStatusCodes import HTTP_GATEWAYTIMEOUT, HTTP_NOCONTENT, HTTP_OK, HTTP_SERVERERROR
 
 LOGGER = logging.getLogger(__name__)
 
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py
index 9c7c11603..f679ce654 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py
@@ -15,9 +15,13 @@
 import logging
 from flask.json import jsonify
 from flask_restful import Resource
-from flask import request
-from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH
-from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_OK
+from common.proto.context_pb2 import SliceStatusEnum
+from common.tools.context_queries.Slice import get_slice
+from common.tools.grpc.Tools import grpc_message_to_json
+from context.client.ContextClient import ContextClient
+from slice.client.SliceClient import SliceClient
+from ..tools.Authentication import HTTP_AUTH
+from ..tools.HttpStatusCodes import HTTP_GATEWAYTIMEOUT, HTTP_NOCONTENT, HTTP_OK, HTTP_SERVERERROR
 
 LOGGER = logging.getLogger(__name__)
 
@@ -25,21 +29,50 @@ class NSS_Service(Resource):
     @HTTP_AUTH.login_required
     def get(self, slice_id : str):
         LOGGER.debug('GET Slice ID: {:s}'.format(str(slice_id)))
-        LOGGER.debug('GET Request: {:s}'.format(str(request)))
-        
-        # TODO Return information and status about requested slice
+        try:
+            context_client = ContextClient()
 
-        response = jsonify({"message": "Requested info for slice {:s}".format(slice_id)})
-        response.status_code = HTTP_OK
+            target = get_slice(context_client, slice_id, rw_copy=True)
+            if target is None:
+                raise Exception('Slice({:s}) not found in database'.format(str(slice_id)))
+
+            if target.slice_id.slice_uuid.uuid != slice_id: # pylint: disable=no-member
+                raise Exception('Slice retrieval failed. Wrong Slice Id was returned')
+
+            slice_ready_status = SliceStatusEnum.SLICESTATUS_ACTIVE
+            slice_status = target.slice_status.slice_status # pylint: disable=no-member
+            response = jsonify(grpc_message_to_json(target))
+            response.status_code = HTTP_OK if slice_status == slice_ready_status else HTTP_GATEWAYTIMEOUT
+
+        except Exception as e: # pylint: disable=broad-except
+            LOGGER.exception('Something went wrong Retrieving Slice({:s})'.format(str(slice_id)))
+            response = jsonify({'error': str(e)})
+            response.status_code = HTTP_SERVERERROR
         return response
 
+
     @HTTP_AUTH.login_required
     def delete(self, slice_id : str):
         LOGGER.debug('DELETE Slice ID: {:s}'.format(str(slice_id)))
-        LOGGER.debug('DELETE Request: {:s}'.format(str(request)))
-        
-        # TODO Delete the requested slice
+        try:
+            context_client = ContextClient()
+            target = get_slice(context_client, slice_id)
 
-        response = jsonify({"message": "Deletion request for slice {:s}".format(slice_id)})
-        response.status_code = HTTP_OK
-        return response
+            response = jsonify({})
+            response.status_code = HTTP_OK
+
+            if target is None:
+                LOGGER.warning('Slice({:s}) not found in database. Nothing done.'.format(str(slice_id)))
+                response.status_code = HTTP_NOCONTENT
+            else:
+                if target.slice_id.slice_uuid.uuid != slice_id:  # pylint: disable=no-member
+                    raise Exception('Slice retrieval failed. Wrong Slice Id was returned')
+                slice_client = SliceClient()
+                slice_client.DeleteSlice(target.slice_id)
+                LOGGER.debug(f"Slice({slice_id}) successfully deleted")
+
+        except Exception as e:  # pylint: disable=broad-except
+            LOGGER.exception('Something went wrong Deleting Slice({:s})'.format(str(slice_id)))
+            response = jsonify({'error': str(e)})
+            response.status_code = HTTP_SERVERERROR
+        return response
\ No newline at end of file
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
index 08f1dced4..987dbb2cd 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
@@ -11,34 +11,101 @@
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-
+import json
 import logging
+import ssl
 from typing import Dict
 from flask.json import jsonify
 from flask_restful import Resource
 from flask import request
-from compute.service.rest_server.nbi_plugins.tools.Authentication import HTTP_AUTH
-from compute.service.rest_server.nbi_plugins.tools.HttpStatusCodes import HTTP_BADREQUEST, HTTP_OK
+
+from common.Constants import DEFAULT_CONTEXT_NAME
+from common.proto.context_pb2 import Slice, SliceStatusEnum, EndPointId, Constraint
+from common.tools.grpc.Tools import grpc_message_to_json
+from ..tools.Authentication import HTTP_AUTH
+from ..tools.HttpStatusCodes import HTTP_BADREQUEST, HTTP_OK, HTTP_CREATED, HTTP_SERVERERROR
 from werkzeug.exceptions import UnsupportedMediaType
 
+from slice.client.SliceClient import SliceClient
+from .bindings import load_json_data
+from .bindings.network_slice_services import NetworkSliceServices
+
 LOGGER = logging.getLogger(__name__)
 
 class NSS_Services(Resource):
     @HTTP_AUTH.login_required
     def get(self):    
         response = jsonify({"message": "All went well!"})
-        response.status_code
-
         # TODO Return list of current network-slice-services
         return response
 
     @HTTP_AUTH.login_required
     def post(self):
-        if not request.is_json: raise UnsupportedMediaType('JSON payload is required')
-        request_data : Dict = request.json
-        LOGGER.debug('POST Request: {:s}'.format(str(request_data)))
-
-        # TODO Parse network-slice-service request and cascade to Slice and Policy componentes
-        response = jsonify({"message" : "POST message received correctly"})
-        response.status_code = HTTP_OK
-        return response
\ No newline at end of file
+        if not request.is_json:
+            raise UnsupportedMediaType('JSON payload is required')
+        request_data = json.dumps(request.json)
+        response = jsonify({})
+        response.status_code = HTTP_CREATED
+
+        slices: NetworkSliceServices = load_json_data(request_data, NetworkSliceServices)[0]
+        for ietf_slice in slices.slice_service:
+            slice_request: Slice = Slice()
+            # Meta information
+            # TODO implement name and owner based on "tags"
+            slice_request.slice_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
+            slice_request.slice_id.slice_uuid.uuid = ietf_slice.service_id()
+            # TODO map with admin status of IETF Slice
+            slice_request.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_PLANNED
+
+            list_endpoints = []
+            for sdp in ietf_slice.sdps().sdp:
+                endpoint = EndPointId()
+                endpoint.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
+                endpoint.device_id.device_uuid.uuid = sdp.node_id()
+                endpoint.endpoint_uuid.uuid = sdp.sdp_id()
+                list_endpoints.append(endpoint)
+            slice_request.slice_endpoint_ids.extend(list_endpoints)
+
+            # TODO Map connectivity_groups and connectivity constructs to real connections
+            LOGGER.debug(f"Connection groups detected: {len(ietf_slice.connection_groups().connection_group())}")
+            list_constraints = []
+            for cg in ietf_slice.connection_groups().connection_group:
+                for cc in cg.connectivity_construct:
+                    if cc.slo_sle_policy:
+                        if cc.slo_sle_policy.custom:
+                            with cc.slo_sle_policy.custom as slo:
+                                for metric_bound in slo.service_slo_sle_policy().metric_bounds().metric_bound:
+                                    if "service-slo-two-way-bandwidth" in str(metric_bound.metric_type()).casefold(): # TODO fix to two way!
+                                        constraint = Constraint()
+                                        metric_unit = metric_bound.metric_unit().casefold()
+                                        capacity = float(metric_bound.value_description()) # Assuming capacity already in Gbps
+                                        if metric_unit == "mbps":
+                                            capacity /= 1E3
+                                        elif metric_unit != "gbps":
+                                            LOGGER.warning(f"Invalided metric unit ({metric_bound.metric_unit()}), must be Mbps or Gbps")
+                                            response.status_code = HTTP_SERVERERROR
+                                            return response
+                                        constraint.sla_capacity.capacity_gbps = capacity
+                                        list_constraints.append(constraint)
+
+                                    elif "service-slo-one-way-delay" in str(metric_bound.metric_type()).casefold():
+                                        if metric_bound.metric_unit().casefold() == "ms":
+                                            latency = float(metric_bound.value_description())
+                                        else:
+                                            LOGGER.warning(f"Invalided metric unit ({metric_bound.metric_unit()}), must be \"ms\" ")
+                                            response.status_code = HTTP_SERVERERROR
+                                            return response
+                                        constraint = Constraint()
+                                        constraint.sla_latency.e2e_latency_ms = latency
+                                        list_constraints.append(constraint)
+
+                                    elif "service-slo-availability":
+                                        # TODO map to an availability number (or use a custom identity definition)
+                                        constraint = Constraint()
+                                        constraint.sla_availability.num_disjoint_paths = 2
+                                        constraint.sla_availability.all_active = True
+            slice_request.slice_constraints.extend(list_constraints)
+            slice_client = SliceClient()
+            slice_client.CreateSlice(slice_request)
+            LOGGER.debug(grpc_message_to_json(slice_request)) # TODO remove
+        return response
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/__init__.py
new file mode 100644
index 000000000..752a51d6a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/__init__.py
@@ -0,0 +1,521 @@
+from itertools import chain
+from typing import (
+    Any, AnyStr, Dict, Iterator, List, Optional, Tuple, Type, Union)
+
+import json
+
+
+class YANGMember:
+
+    _yang_name: str = None
+    _yang_namespace: str = None
+    _yang_module_name: str = None
+
+    def __init__(
+            self, yang_name: str, yang_namespace: str,
+            yang_module_name: str):
+
+        self._yang_name = yang_name
+        self._yang_namespace = yang_namespace
+        self._yang_module_name = yang_module_name
+
+    @property
+    def yang_name(self) -> str:
+        return self._yang_name
+
+    @property
+    def yang_namespace(self) -> str:
+        return self._yang_namespace
+
+    @property
+    def yang_module_name(self) -> str:
+        return self._yang_module_name
+
+
+class YANGLeafMember(YANGMember):
+
+    def __get__(self, instance, owner=None):
+        if instance is None:
+            return self
+
+        yang_name = self._yang_name
+        yang_member = self
+
+        class ChildLeaf:
+
+            def __call__(self):
+                data = instance._data
+                if (key := yang_name) in data:
+                    return data[key]
+
+                return data.get(':'.join((
+                    yang_member._yang_module_name, yang_name)))
+
+            @property
+            def yang_name(self) -> str:
+                return yang_member._yang_name
+
+            @property
+            def yang_namespace(self) -> str:
+                return yang_member._yang_namespace
+
+            @property
+            def yang_module_name(self) -> str:
+                return yang_member._yang_module_name
+
+            def __enter__(self):
+                return self()
+
+            def __exit__(self, exc_type, exc, traceback):
+                if exc is not None:
+                    raise exc
+
+            def __repr__(self):
+                return (
+                    f"<{owner.__qualname__}.{type(self).__name__}: " +
+                    f"{yang_member._yang_module_name}" +
+                    f":{yang_member.yang_name}>")
+
+        return ChildLeaf()
+
+    def __set__(self, instance, value):
+        if instance is None:
+            return
+
+        data = instance._data
+        if ((key := ':'.join((self._yang_module_name, self._yang_name)))
+                in data):
+
+            data[key] = value
+        else:
+            data[self._yang_name] = value
+
+
+class YANGContainerMember(YANGMember):
+
+    _yang_container_type: Type['YANGContainer'] = None
+
+    def __init__(self, yang_container_type: Type['YANGContainer']):
+        super().__init__(
+            yang_container_type._yang_name,
+            yang_container_type._yang_namespace,
+            yang_container_type._yang_module_name)
+
+        self._yang_container_type = yang_container_type
+
+    def __get__(self, instance, owner=None):
+        if instance is None:
+            return self
+
+        yang_container_type = self._yang_container_type
+        yang_name = self._yang_name
+        yang_member = self
+
+        class ChildContainer:
+
+            def __call__(self) -> yang_container_type:
+                data = instance._data
+
+                if (key := ':'.join((
+                        yang_member._yang_module_name, yang_name))) in data:
+
+                    child_data = data[key]
+                else:
+                    child_data = data.setdefault(yang_name, {})
+
+                return yang_container_type({yang_name: child_data})
+
+            @property
+            def yang_name(self) -> str:
+                return yang_member._yang_name
+
+            @property
+            def yang_namespace(self) -> str:
+                return yang_member._yang_namespace
+
+            @property
+            def yang_module_name(self) -> str:
+                return yang_member._yang_module_name
+
+            def __enter__(self):
+                return self()
+
+            def __exit__(self, exc_type, exc, traceback):
+                if exc is not None:
+                    raise exc
+
+            def to_json(self, yang_parent_module_name: str=None):
+                return self().to_json(
+                    yang_parent_module_name=yang_parent_module_name)
+
+        return ChildContainer()
+
+
+class YANGListMember(YANGMember):
+
+    _yang_list_item_type: Type['YANGListItem'] = None
+
+    def __init__(self, yang_list_item_type: Type['YANGListItem']):
+        super().__init__(
+            yang_list_item_type._yang_name,
+            yang_list_item_type._yang_namespace,
+            yang_list_item_type._yang_module_name)
+
+        self._yang_list_item_type = yang_list_item_type
+
+    def __get__(self, instance, owner=None):
+        if instance is None:
+            return self
+
+        yang_list_item_type = self._yang_list_item_type
+        yang_name = self._yang_name
+        yang_member = self
+
+        class ChildList:
+
+            @staticmethod
+            def _child_data_list():
+                data = instance._data
+                if (key := ':'.join((
+                        yang_member._yang_module_name, yang_name))) in data:
+
+                    return data[key]
+
+                return data.setdefault(yang_name, [])
+
+            def __call__(self) -> List[yang_list_item_type]:
+                return list(iter(self))
+
+            def __iter__(self) -> Iterator[yang_list_item_type]:
+                for child_data in self._child_data_list():
+                    yield yang_list_item_type({yang_name: [child_data]})
+
+            def __getitem__(self, key) -> yang_list_item_type:
+                child_data_list = self._child_data_list()
+                child = yang_list_item_type(
+                    {yang_member._yang_name: child_data_list},
+                    json_data_list_key=key)
+
+                if not id(child_data := child._data) in map(
+                        id, child_data_list):
+                    child_data_list.append(child_data)
+                return child
+
+            @property
+            def yang_name(self) -> str:
+                return yang_member._yang_name
+
+            @property
+            def yang_namespace(self) -> str:
+                return yang_member._yang_namespace
+
+            @property
+            def yang_module_name(self) -> str:
+                return yang_member._yang_module_name
+
+            def __enter__(self):
+                return self
+
+            def __exit__(self, exc_type, exc, traceback):
+                if exc is not None:
+                    raise exc
+
+            def to_json(self, yang_parent_module_name=None):
+                json_data = {}
+                for child in self():
+                    for child_name, child_data_list in (child.to_json(
+                            yang_parent_module_name=(
+                            yang_parent_module_name))).items():
+
+                        json_data.setdefault(child_name, []).extend(
+                            child_data_list)
+
+                return json_data
+
+        return ChildList()
+
+
+class YANGContainer:
+    """Base class for YANG container handlers."""
+
+    _yang_name: str = None
+    _yang_namespace: str = None
+    _yang_module_name: str = None
+
+    _data: Dict[str, Any] = None
+
+    _yang_leaf_members: Dict[str, YANGLeafMember] = None
+    _yang_container_members: Dict[str, YANGContainerMember] = None
+    _yang_list_members: Dict[str, YANGListMember] = None
+
+    _yang_choices: Dict[str, 'YANGChoice'] = None
+
+    def __init__(
+            self, json_data: Optional[Union[AnyStr, Dict[str, Any]]]=None):
+
+        if json_data is None:
+            self._data = {}
+            return
+
+        if isinstance(json_data, bytes):
+            json_data = json_data.decode('utf8')
+
+        if isinstance(json_data, str):
+            json_data = json.loads(json_data)
+
+        if (key := ':'.join((
+                self._yang_module_name, self._yang_name))) not in json_data:
+            key = self._yang_name
+
+        data = json_data.get(key, {})
+        if not isinstance(data, dict):
+            raise TypeError(f"{key!r} should be a dict, not: {type(data)}")
+
+        for yang_choice in self._yang_choices.values():
+            yang_choice(data)
+
+        self._data = data
+
+    @property
+    def yang_name(self) -> str:
+        return self._yang_name
+
+    @property
+    def yang_namespace(self) -> str:
+        return self._yang_namespace
+
+    @property
+    def yang_module_name(self) -> str:
+        return self._yang_module_name
+
+    def to_json(self, yang_parent_module_name=None) -> Dict[str, Any]:
+
+        def child_items():
+            for yang_name, yang_member in self._yang_leaf_members.items():
+                if (value := yang_member.__get__(self)()) is not None:
+
+                    if (yang_child_module_name :=
+                            yang_member.yang_module_name) != (
+                                    self._yang_module_name):
+
+                        child_key = ':'.join((
+                            yang_child_module_name, yang_name))
+                    else:
+                        child_key = yang_name
+
+                    yield child_key, value
+
+            for yang_name, yang_member in (
+                    self._yang_container_members.items()):
+
+                if yang_name in self._data or ':'.join((
+                        yang_member._yang_namespace,
+                        yang_name)) in self._data:
+
+                    yield from yang_member.__get__(self).to_json(
+                        yang_parent_module_name=(
+                            self._yang_module_name)).items()
+
+            for yang_name, yang_member in self._yang_list_members.items():
+                if yang_name in self._data or ':'.join((
+                        yang_member._yang_namespace,
+                        yang_name)) in self._data:
+
+                    yield from yang_member.__get__(self).to_json(
+                        yang_parent_module_name=(
+                            self._yang_module_name)).items()
+
+            for yang_choice in self._yang_choices.values():
+                if (yang_case_container :=
+                        yang_choice._yang_case_container) is not None:
+
+                    yield from next(iter(yang_case_container.to_json(
+                        yang_parent_module_name=(
+                            self._yang_module_name)).values())).items()
+
+        if (yang_module_name := self._yang_module_name) != (
+                yang_parent_module_name):
+            key = ':'.join((yang_module_name, self._yang_name))
+        else:
+            key = self._yang_name
+
+        return {key: dict(child_items())}
+
+
+class YANGListItem(YANGContainer):
+    """Base class for YANG list item handlers."""
+
+    _yang_list_key_names: Tuple[str] = None
+
+    def __init__(
+            self, json_data: Optional[Union[AnyStr, Dict[str, Any]]]=None,
+            json_data_list_key=None):
+
+        if json_data is None:
+            raise ValueError(f"{self._yang_name!r} list needs input data")
+
+        if isinstance(json_data, bytes):
+            json_data = json_data.decode('utf8')
+
+        if isinstance(json_data, str):
+            json_data = json.loads(json_data)
+
+        if (key := ':'.join((
+                self._yang_module_name, self._yang_name))) not in json_data:
+            key = self._yang_name
+
+        data_list = json_data.get(key, [])
+        if not isinstance(data_list, list):
+            raise TypeError(
+                f"{key!r} should be a list, not: {type(data_list)}")
+
+        if json_data_list_key is None:
+            if len(data_list) == 1:
+                data = data_list[0]
+            else:
+                raise ValueError(f"{key!r} list key is missing")
+
+        else:
+            if not isinstance(json_data_list_key, tuple):
+                json_data_list_key = (json_data_list_key, )
+
+            for data in json_data.get(key, []):
+                if tuple(
+                        data.get(yang_name) for yang_name
+                        in self._yang_list_key_names) == json_data_list_key:
+
+                    break
+            else:
+                data = {key: value for key, value in zip(
+                    self._yang_list_key_names, json_data_list_key)}
+
+        if not isinstance(data, dict):
+            raise TypeError(
+                f"{key!r} list item should be a dict, not: {type(data)}")
+
+        for yang_choice in self._yang_choices.values():
+            yang_choice(data)
+
+        self._data = data
+
+    def yang_key(self):
+        if len(self._yang_list_key_names) == 1:
+            return self._yang_leaf_members[
+                self._yang_list_key_names[0]].__get__(self)()
+
+        return tuple(
+            self._yang_leaf_members[yang_name].__get__(self)()
+            for yang_name in self._yang_list_key_names)
+
+    def to_json(self, yang_parent_module_name=None) -> Dict[str, list]:
+        return {key: [data] for key, data in super().to_json(
+            yang_parent_module_name=yang_parent_module_name).items()}
+
+
+class YANGChoiceCase:
+    """Base class for YANG choice case handlers."""
+
+    _yang_name: str = None
+
+    _yang_container_type: Type[YANGContainer] = None
+
+    _yang_container: YANGContainer = None
+
+    def __init__(self, yang_container_type: Type[YANGContainer]):
+        self._yang_container_type = yang_container_type
+        self._yang_name = yang_container_type._yang_name
+
+    @property
+    def yang_name(self) -> str:
+        return self._yang_name
+
+    def __get__(self, instance, owner=None):
+        if instance is None:
+            return self
+
+        yang_case_container_type = self._yang_container_type
+        yang_name = self._yang_name
+        yang_choice_case = self
+
+        class Case:
+
+            def __bool__(self) -> bool:
+                return (yang_case_container :=
+                    yang_choice_case._yang_container) is not None and (
+                        bool(yang_case_container._data))
+
+            def __call__(self, data: Optional[Dict[str, Any]]=None):
+                if data:
+                    for yang_member in chain(
+                            yang_case_container_type.
+                            _yang_leaf_members.values(),
+
+                            yang_case_container_type.
+                            _yang_container_members.values(),
+
+                            yang_case_container_type.
+                            _yang_list_members.values()):
+
+                        if yang_member._yang_name in data or ':'.join((
+                                yang_member._yang_module_name,
+                                yang_member._yang_name)) in data:
+                            break
+                    else:
+                        data = None
+
+                if data:
+                    yang_choice_case._yang_container = (
+                        yang_case_container_type({yang_name: data}))
+
+                elif yang_choice_case._yang_container is None:
+                    yang_choice_case._yang_container = (
+                        yang_case_container_type())
+
+                return yang_choice_case._yang_container
+
+            def __enter__(self):
+                return self()
+
+            def __exit__(self, exc_type, exc, traceback):
+                if exc is not None:
+                    raise exc
+
+        return Case()
+
+
+class YANGChoice(YANGMember):
+    """Base class for YANG choice handlers."""
+
+    _yang_parent: YANGContainer = None
+
+    _yang_cases: Dict[str, YANGChoiceCase] = None
+
+    def __init__(self, yang_parent: YANGContainer):
+        self._yang_parent = yang_parent
+
+    def __call__(self, data: Dict[str, Any]):
+        for yang_case in self._yang_cases.values():
+            yang_case.__get__(self)(data)
+
+    @property
+    def _yang_case_container(self) -> YANGContainer:
+        for yang_case in self._yang_cases.values():
+            if (yang_container :=
+                    yang_case._yang_container) is not None and (
+                            yang_container._data):
+                return yang_container
+
+
+def load_json_data(
+        json_data: Union[AnyStr, Dict[str, Any]],
+        *yang_types: Type[YANGContainer]) -> List[YANGContainer]:
+
+    if isinstance(json_data, bytes):
+        json_data = json_data.decode('utf8')
+
+    if isinstance(json_data, str):
+        json_data = json.loads(json_data)
+
+    json_data = json_data.get('data', json_data)
+
+    return [yang_type(json_data) for yang_type in yang_types]
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/__init__.py
new file mode 100644
index 000000000..9570bd4a1
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/__init__.py
@@ -0,0 +1,127 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NacmMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: nacm
+    """
+    from .groups import Groups
+    from .rule_list import RuleList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: nacm
+        """
+
+        def __init__(self):
+            super().__init__(Nacm)
+
+        def __get__(self, instance, owner=None) -> (
+                'NacmMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Nacm':
+            pass
+
+        def __enter__(self) -> 'Nacm':
+            pass
+
+
+class Nacm(
+        YANGContainer,
+        metaclass=NacmMeta):
+    """
+    YANG container handler.
+
+    YANG name: nacm
+    """
+
+    _yang_name: Final[str] = 'nacm'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-netconf-acm'
+    _yang_module_name: Final[str] = 'ietf-netconf-acm'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'denied-data-writes': (
+            denied_data_writes := YANGLeafMember(
+                'denied-data-writes',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'exec-default': (
+            exec_default := YANGLeafMember(
+                'exec-default',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'denied-notifications': (
+            denied_notifications := YANGLeafMember(
+                'denied-notifications',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'enable-external-groups': (
+            enable_external_groups := YANGLeafMember(
+                'enable-external-groups',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'enable-nacm': (
+            enable_nacm := YANGLeafMember(
+                'enable-nacm',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'read-default': (
+            read_default := YANGLeafMember(
+                'read-default',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'denied-operations': (
+            denied_operations := YANGLeafMember(
+                'denied-operations',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'write-default': (
+            write_default := YANGLeafMember(
+                'write-default',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'groups': (
+            groups := (  # YANGContainerMember(
+                NacmMeta.
+                Groups.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'rule-list': (
+            rule_list := (  # YANGListMember(
+                NacmMeta.
+                RuleList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Nacm':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/__init__.py
new file mode 100644
index 000000000..665898496
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GroupsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: groups
+    """
+    from .group import Group
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: groups
+        """
+
+        def __init__(self):
+            super().__init__(Groups)
+
+        def __get__(self, instance, owner=None) -> (
+                'GroupsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Groups':
+            pass
+
+        def __enter__(self) -> 'Groups':
+            pass
+
+
+class Groups(
+        YANGContainer,
+        metaclass=GroupsMeta):
+    """
+    YANG container handler.
+
+    YANG name: groups
+    """
+
+    _yang_name: Final[str] = 'groups'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-netconf-acm'
+    _yang_module_name: Final[str] = 'ietf-netconf-acm'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'group': (
+            group := (  # YANGListMember(
+                GroupsMeta.
+                Group.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Groups':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/group/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/group/__init__.py
new file mode 100644
index 000000000..1e696678f
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/group/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GroupMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: group
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: group
+        """
+
+        def __init__(self):
+            super().__init__(Group)
+
+        def __get__(self, instance, owner=None) -> (
+                'GroupMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Group']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Group']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Group':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'GroupMeta.yang_list_descriptor'):
+            pass
+
+
+class Group(
+        YANGListItem,
+        metaclass=GroupMeta):
+    """
+    YANG list item handler.
+
+    YANG name: group
+    """
+
+    _yang_name: Final[str] = 'group'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-netconf-acm'
+    _yang_module_name: Final[str] = 'ietf-netconf-acm'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Group':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/__init__.py
new file mode 100644
index 000000000..b0a081874
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RuleListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: rule-list
+    """
+    from .rule import Rule
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: rule-list
+        """
+
+        def __init__(self):
+            super().__init__(RuleList)
+
+        def __get__(self, instance, owner=None) -> (
+                'RuleListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RuleList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RuleList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RuleList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RuleListMeta.yang_list_descriptor'):
+            pass
+
+
+class RuleList(
+        YANGListItem,
+        metaclass=RuleListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: rule-list
+    """
+
+    _yang_name: Final[str] = 'rule-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-netconf-acm'
+    _yang_module_name: Final[str] = 'ietf-netconf-acm'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'rule': (
+            rule := (  # YANGListMember(
+                RuleListMeta.
+                Rule.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RuleList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py
new file mode 100644
index 000000000..af4bdd592
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py
@@ -0,0 +1,116 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RuleMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: rule
+    """
+    from .rule_type import RuleType
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: rule
+        """
+
+        def __init__(self):
+            super().__init__(Rule)
+
+        def __get__(self, instance, owner=None) -> (
+                'RuleMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Rule']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Rule']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Rule':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RuleMeta.yang_list_descriptor'):
+            pass
+
+
+class Rule(
+        YANGListItem,
+        metaclass=RuleMeta):
+    """
+    YANG list item handler.
+
+    YANG name: rule
+    """
+
+    _yang_name: Final[str] = 'rule'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-netconf-acm'
+    _yang_module_name: Final[str] = 'ietf-netconf-acm'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'action': (
+            action := YANGLeafMember(
+                'action',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'access-operations': (
+            access_operations := YANGLeafMember(
+                'access-operations',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'comment': (
+            comment := YANGLeafMember(
+                'comment',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+
+        'module-name': (
+            module_name := YANGLeafMember(
+                'module-name',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Rule':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'rule-type':
+                RuleMeta.RuleType(
+                    instance),
+        }
+        return instance
+
+    @property
+    def rule_type(self) -> (
+            RuleMeta.RuleType):
+        return self._yang_choices['rule-type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py
new file mode 100644
index 000000000..881c7f4b4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py
@@ -0,0 +1,116 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RuleTypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: rule-type
+    """
+
+    from .notification import Notification
+    from .protocol_operation import ProtocolOperation
+    from .data_node import DataNode
+
+    class notification_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: notification
+        """
+
+        def __init__(self):
+            super().__init__(
+                RuleTypeMeta.Notification)
+
+        def __get__(self, instance, owner=None) -> (
+                'RuleTypeMeta.notification_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'RuleTypeMeta.Notification'):
+            pass
+
+        def __enter__(self) -> (
+                'RuleTypeMeta.Notification'):
+            pass
+
+    class protocol_operation_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: protocol-operation
+        """
+
+        def __init__(self):
+            super().__init__(
+                RuleTypeMeta.ProtocolOperation)
+
+        def __get__(self, instance, owner=None) -> (
+                'RuleTypeMeta.protocol_operation_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'RuleTypeMeta.ProtocolOperation'):
+            pass
+
+        def __enter__(self) -> (
+                'RuleTypeMeta.ProtocolOperation'):
+            pass
+
+    class data_node_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: data-node
+        """
+
+        def __init__(self):
+            super().__init__(
+                RuleTypeMeta.DataNode)
+
+        def __get__(self, instance, owner=None) -> (
+                'RuleTypeMeta.data_node_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'RuleTypeMeta.DataNode'):
+            pass
+
+        def __enter__(self) -> (
+                'RuleTypeMeta.DataNode'):
+            pass
+
+
+class RuleType(YANGChoice, metaclass=RuleTypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: rule-type
+    """
+
+    _yang_name: Final[str] = 'rule-type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-netconf-acm'
+    _yang_module_name: Final[str] = 'ietf-netconf-acm'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'notification': (
+            notification := (  # YANGChoiceCase(
+                RuleTypeMeta.
+                notification_case_descriptor())),
+
+        'protocol-operation': (
+            protocol_operation := (  # YANGChoiceCase(
+                RuleTypeMeta.
+                protocol_operation_case_descriptor())),
+
+        'data-node': (
+            data_node := (  # YANGChoiceCase(
+                RuleTypeMeta.
+                data_node_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py
new file mode 100644
index 000000000..1e419b06b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class DataNodeMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: data-node
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: data-node
+        """
+
+        def __init__(self):
+            super().__init__(DataNode)
+
+        def __get__(self, instance, owner=None) -> (
+                'DataNodeMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'DataNode':
+            pass
+
+        def __enter__(self) -> 'DataNode':
+            pass
+
+
+class DataNode(
+        YANGContainer,
+        metaclass=DataNodeMeta):
+    """
+    YANG container handler.
+
+    YANG name: data-node
+    """
+
+    _yang_name: Final[str] = 'data-node'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-netconf-acm'
+    _yang_module_name: Final[str] = 'ietf-netconf-acm'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path': (
+            path := YANGLeafMember(
+                'path',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'DataNode':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py
new file mode 100644
index 000000000..5e1302f83
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NotificationMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: notification
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: notification
+        """
+
+        def __init__(self):
+            super().__init__(Notification)
+
+        def __get__(self, instance, owner=None) -> (
+                'NotificationMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Notification':
+            pass
+
+        def __enter__(self) -> 'Notification':
+            pass
+
+
+class Notification(
+        YANGContainer,
+        metaclass=NotificationMeta):
+    """
+    YANG container handler.
+
+    YANG name: notification
+    """
+
+    _yang_name: Final[str] = 'notification'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-netconf-acm'
+    _yang_module_name: Final[str] = 'ietf-netconf-acm'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'notification-name': (
+            notification_name := YANGLeafMember(
+                'notification-name',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Notification':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py
new file mode 100644
index 000000000..969243ad3
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ProtocolOperationMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: protocol-operation
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: protocol-operation
+        """
+
+        def __init__(self):
+            super().__init__(ProtocolOperation)
+
+        def __get__(self, instance, owner=None) -> (
+                'ProtocolOperationMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ProtocolOperation':
+            pass
+
+        def __enter__(self) -> 'ProtocolOperation':
+            pass
+
+
+class ProtocolOperation(
+        YANGContainer,
+        metaclass=ProtocolOperationMeta):
+    """
+    YANG container handler.
+
+    YANG name: protocol-operation
+    """
+
+    _yang_name: Final[str] = 'protocol-operation'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-netconf-acm'
+    _yang_module_name: Final[str] = 'ietf-netconf-acm'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'rpc-name': (
+            rpc_name := YANGLeafMember(
+                'rpc-name',
+                'urn:ietf:params:xml:ns:yang:ietf-netconf-acm',
+                'ietf-netconf-acm')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ProtocolOperation':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/__init__.py
new file mode 100644
index 000000000..a77e29c3d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NetworkSliceServicesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: network-slice-services
+    """
+    from .slo_sle_templates import SloSleTemplates
+    from .slice_service import SliceService
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: network-slice-services
+        """
+
+        def __init__(self):
+            super().__init__(NetworkSliceServices)
+
+        def __get__(self, instance, owner=None) -> (
+                'NetworkSliceServicesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NetworkSliceServices':
+            pass
+
+        def __enter__(self) -> 'NetworkSliceServices':
+            pass
+
+
+class NetworkSliceServices(
+        YANGContainer,
+        metaclass=NetworkSliceServicesMeta):
+    """
+    YANG container handler.
+
+    YANG name: network-slice-services
+    """
+
+    _yang_name: Final[str] = 'network-slice-services'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'slo-sle-templates': (
+            slo_sle_templates := (  # YANGContainerMember(
+                NetworkSliceServicesMeta.
+                SloSleTemplates.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'slice-service': (
+            slice_service := (  # YANGListMember(
+                NetworkSliceServicesMeta.
+                SliceService.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NetworkSliceServices':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py
new file mode 100644
index 000000000..759b4cc1f
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py
@@ -0,0 +1,133 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SliceServiceMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: slice-service
+    """
+    from .connection_groups import ConnectionGroups
+    from .te_topology_identifier import TeTopologyIdentifier
+    from .status import Status
+    from .sdps import Sdps
+    from .service_tags import ServiceTags
+    from .slo_sle_policy import SloSlePolicy
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: slice-service
+        """
+
+        def __init__(self):
+            super().__init__(SliceService)
+
+        def __get__(self, instance, owner=None) -> (
+                'SliceServiceMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['SliceService']:
+            pass
+
+        def __iter__(self, key) -> Iterator['SliceService']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'SliceService':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'SliceServiceMeta.yang_list_descriptor'):
+            pass
+
+
+class SliceService(
+        YANGListItem,
+        metaclass=SliceServiceMeta):
+    """
+    YANG list item handler.
+
+    YANG name: slice-service
+    """
+
+    _yang_name: Final[str] = 'slice-service'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'service-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'service-id': (
+            service_id := YANGLeafMember(
+                'service-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'service-description': (
+            service_description := YANGLeafMember(
+                'service-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'connection-groups': (
+            connection_groups := (  # YANGContainerMember(
+                SliceServiceMeta.
+                ConnectionGroups.
+                yang_container_descriptor())),
+
+        'te-topology-identifier': (
+            te_topology_identifier := (  # YANGContainerMember(
+                SliceServiceMeta.
+                TeTopologyIdentifier.
+                yang_container_descriptor())),
+
+        'status': (
+            status := (  # YANGContainerMember(
+                SliceServiceMeta.
+                Status.
+                yang_container_descriptor())),
+
+        'sdps': (
+            sdps := (  # YANGContainerMember(
+                SliceServiceMeta.
+                Sdps.
+                yang_container_descriptor())),
+
+        'service-tags': (
+            service_tags := (  # YANGContainerMember(
+                SliceServiceMeta.
+                ServiceTags.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SliceService':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'slo-sle-policy':
+                SliceServiceMeta.SloSlePolicy(
+                    instance),
+        }
+        return instance
+
+    @property
+    def slo_sle_policy(self) -> (
+            SliceServiceMeta.SloSlePolicy):
+        return self._yang_choices['slo-sle-policy']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py
new file mode 100644
index 000000000..205111bea
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectionGroupsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: connection-groups
+    """
+    from .connection_group import ConnectionGroup
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: connection-groups
+        """
+
+        def __init__(self):
+            super().__init__(ConnectionGroups)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectionGroupsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ConnectionGroups':
+            pass
+
+        def __enter__(self) -> 'ConnectionGroups':
+            pass
+
+
+class ConnectionGroups(
+        YANGContainer,
+        metaclass=ConnectionGroupsMeta):
+    """
+    YANG container handler.
+
+    YANG name: connection-groups
+    """
+
+    _yang_name: Final[str] = 'connection-groups'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'connection-group': (
+            connection_group := (  # YANGListMember(
+                ConnectionGroupsMeta.
+                ConnectionGroup.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ConnectionGroups':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py
new file mode 100644
index 000000000..4c75d553a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py
@@ -0,0 +1,118 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectionGroupMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: connection-group
+    """
+    from .connection_group_monitoring import ConnectionGroupMonitoring
+    from .connectivity_construct import ConnectivityConstruct
+    from .slo_sle_policy import SloSlePolicy
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: connection-group
+        """
+
+        def __init__(self):
+            super().__init__(ConnectionGroup)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectionGroupMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['ConnectionGroup']:
+            pass
+
+        def __iter__(self, key) -> Iterator['ConnectionGroup']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'ConnectionGroup':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'ConnectionGroupMeta.yang_list_descriptor'):
+            pass
+
+
+class ConnectionGroup(
+        YANGListItem,
+        metaclass=ConnectionGroupMeta):
+    """
+    YANG list item handler.
+
+    YANG name: connection-group
+    """
+
+    _yang_name: Final[str] = 'connection-group'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'connection-group-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'connectivity-type': (
+            connectivity_type := YANGLeafMember(
+                'connectivity-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'connection-group-id': (
+            connection_group_id := YANGLeafMember(
+                'connection-group-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'service-slo-sle-policy-override': (
+            service_slo_sle_policy_override := YANGLeafMember(
+                'service-slo-sle-policy-override',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'connection-group-monitoring': (
+            connection_group_monitoring := (  # YANGContainerMember(
+                ConnectionGroupMeta.
+                ConnectionGroupMonitoring.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'connectivity-construct': (
+            connectivity_construct := (  # YANGListMember(
+                ConnectionGroupMeta.
+                ConnectivityConstruct.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ConnectionGroup':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'slo-sle-policy':
+                ConnectionGroupMeta.SloSlePolicy(
+                    instance),
+        }
+        return instance
+
+    @property
+    def slo_sle_policy(self) -> (
+            ConnectionGroupMeta.SloSlePolicy):
+        return self._yang_choices['slo-sle-policy']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py
new file mode 100644
index 000000000..ea8073ef7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py
@@ -0,0 +1,113 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectionGroupMonitoringMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: connection-group-monitoring
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: connection-group-monitoring
+        """
+
+        def __init__(self):
+            super().__init__(ConnectionGroupMonitoring)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectionGroupMonitoringMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ConnectionGroupMonitoring':
+            pass
+
+        def __enter__(self) -> 'ConnectionGroupMonitoring':
+            pass
+
+
+class ConnectionGroupMonitoring(
+        YANGContainer,
+        metaclass=ConnectionGroupMonitoringMeta):
+    """
+    YANG container handler.
+
+    YANG name: connection-group-monitoring
+    """
+
+    _yang_name: Final[str] = 'connection-group-monitoring'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'one-way-delay-variation': (
+            one_way_delay_variation := YANGLeafMember(
+                'one-way-delay-variation',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'one-way-max-delay': (
+            one_way_max_delay := YANGLeafMember(
+                'one-way-max-delay',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'one-way-packet-loss': (
+            one_way_packet_loss := YANGLeafMember(
+                'one-way-packet-loss',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'two-way-max-delay': (
+            two_way_max_delay := YANGLeafMember(
+                'two-way-max-delay',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'two-way-min-delay': (
+            two_way_min_delay := YANGLeafMember(
+                'two-way-min-delay',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'one-way-min-delay': (
+            one_way_min_delay := YANGLeafMember(
+                'one-way-min-delay',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'two-way-packet-loss': (
+            two_way_packet_loss := YANGLeafMember(
+                'two-way-packet-loss',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'two-way-delay-variation': (
+            two_way_delay_variation := YANGLeafMember(
+                'two-way-delay-variation',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ConnectionGroupMonitoring':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py
new file mode 100644
index 000000000..0155bb1ff
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectivityConstructMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: connectivity-construct
+    """
+    from .connectivity_construct_monitoring import ConnectivityConstructMonitoring
+    from .slo_sle_policy import SloSlePolicy
+    from .connectivity_construct_type import ConnectivityConstructType
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: connectivity-construct
+        """
+
+        def __init__(self):
+            super().__init__(ConnectivityConstruct)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectivityConstructMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['ConnectivityConstruct']:
+            pass
+
+        def __iter__(self, key) -> Iterator['ConnectivityConstruct']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'ConnectivityConstruct':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'ConnectivityConstructMeta.yang_list_descriptor'):
+            pass
+
+
+class ConnectivityConstruct(
+        YANGListItem,
+        metaclass=ConnectivityConstructMeta):
+    """
+    YANG list item handler.
+
+    YANG name: connectivity-construct
+    """
+
+    _yang_name: Final[str] = 'connectivity-construct'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'cc-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'service-slo-sle-policy-override': (
+            service_slo_sle_policy_override := YANGLeafMember(
+                'service-slo-sle-policy-override',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'cc-id': (
+            cc_id := YANGLeafMember(
+                'cc-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'connectivity-construct-monitoring': (
+            connectivity_construct_monitoring := (  # YANGContainerMember(
+                ConnectivityConstructMeta.
+                ConnectivityConstructMonitoring.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ConnectivityConstruct':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'slo-sle-policy':
+                ConnectivityConstructMeta.SloSlePolicy(
+                    instance),
+
+            'connectivity-construct-type':
+                ConnectivityConstructMeta.ConnectivityConstructType(
+                    instance),
+        }
+        return instance
+
+    @property
+    def slo_sle_policy(self) -> (
+            ConnectivityConstructMeta.SloSlePolicy):
+        return self._yang_choices['slo-sle-policy']
+
+    @property
+    def connectivity_construct_type(self) -> (
+            ConnectivityConstructMeta.ConnectivityConstructType):
+        return self._yang_choices['connectivity-construct-type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py
new file mode 100644
index 000000000..372d1669c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py
@@ -0,0 +1,113 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectivityConstructMonitoringMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: connectivity-construct-monitoring
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: connectivity-construct-monitoring
+        """
+
+        def __init__(self):
+            super().__init__(ConnectivityConstructMonitoring)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectivityConstructMonitoringMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ConnectivityConstructMonitoring':
+            pass
+
+        def __enter__(self) -> 'ConnectivityConstructMonitoring':
+            pass
+
+
+class ConnectivityConstructMonitoring(
+        YANGContainer,
+        metaclass=ConnectivityConstructMonitoringMeta):
+    """
+    YANG container handler.
+
+    YANG name: connectivity-construct-monitoring
+    """
+
+    _yang_name: Final[str] = 'connectivity-construct-monitoring'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'one-way-delay-variation': (
+            one_way_delay_variation := YANGLeafMember(
+                'one-way-delay-variation',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'two-way-max-delay': (
+            two_way_max_delay := YANGLeafMember(
+                'two-way-max-delay',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'two-way-packet-loss': (
+            two_way_packet_loss := YANGLeafMember(
+                'two-way-packet-loss',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'one-way-packet-loss': (
+            one_way_packet_loss := YANGLeafMember(
+                'one-way-packet-loss',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'one-way-max-delay': (
+            one_way_max_delay := YANGLeafMember(
+                'one-way-max-delay',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'two-way-delay-variation': (
+            two_way_delay_variation := YANGLeafMember(
+                'two-way-delay-variation',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'two-way-min-delay': (
+            two_way_min_delay := YANGLeafMember(
+                'two-way-min-delay',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'one-way-min-delay': (
+            one_way_min_delay := YANGLeafMember(
+                'one-way-min-delay',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ConnectivityConstructMonitoring':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py
new file mode 100644
index 000000000..a3a2a6a5c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py
@@ -0,0 +1,116 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectivityConstructTypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: connectivity-construct-type
+    """
+
+    from .p2mp import P2mp
+    from .a2a import A2a
+    from .p2p import P2p
+
+    class p2mp_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: p2mp
+        """
+
+        def __init__(self):
+            super().__init__(
+                ConnectivityConstructTypeMeta.P2mp)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectivityConstructTypeMeta.p2mp_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'ConnectivityConstructTypeMeta.P2mp'):
+            pass
+
+        def __enter__(self) -> (
+                'ConnectivityConstructTypeMeta.P2mp'):
+            pass
+
+    class a2a_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: a2a
+        """
+
+        def __init__(self):
+            super().__init__(
+                ConnectivityConstructTypeMeta.A2a)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectivityConstructTypeMeta.a2a_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'ConnectivityConstructTypeMeta.A2a'):
+            pass
+
+        def __enter__(self) -> (
+                'ConnectivityConstructTypeMeta.A2a'):
+            pass
+
+    class p2p_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: p2p
+        """
+
+        def __init__(self):
+            super().__init__(
+                ConnectivityConstructTypeMeta.P2p)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectivityConstructTypeMeta.p2p_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'ConnectivityConstructTypeMeta.P2p'):
+            pass
+
+        def __enter__(self) -> (
+                'ConnectivityConstructTypeMeta.P2p'):
+            pass
+
+
+class ConnectivityConstructType(YANGChoice, metaclass=ConnectivityConstructTypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: connectivity-construct-type
+    """
+
+    _yang_name: Final[str] = 'connectivity-construct-type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'p2mp': (
+            p2mp := (  # YANGChoiceCase(
+                ConnectivityConstructTypeMeta.
+                p2mp_case_descriptor())),
+
+        'a2a': (
+            a2a := (  # YANGChoiceCase(
+                ConnectivityConstructTypeMeta.
+                a2a_case_descriptor())),
+
+        'p2p': (
+            p2p := (  # YANGChoiceCase(
+                ConnectivityConstructTypeMeta.
+                p2p_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py
new file mode 100644
index 000000000..b663825e8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class A2aMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: a2a
+    """
+    from .a2a_sdp import A2aSdp
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: a2a
+        """
+
+        def __init__(self):
+            super().__init__(A2a)
+
+        def __get__(self, instance, owner=None) -> (
+                'A2aMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'A2a':
+            pass
+
+        def __enter__(self) -> 'A2a':
+            pass
+
+
+class A2a(
+        YANGContainer,
+        metaclass=A2aMeta):
+    """
+    YANG container handler.
+
+    YANG name: a2a
+    """
+
+    _yang_name: Final[str] = 'a2a'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'a2a-sdp': (
+            a2a_sdp := (  # YANGListMember(
+                A2aMeta.
+                A2aSdp.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'A2a':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py
new file mode 100644
index 000000000..4360ef981
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class A2aSdpMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: a2a-sdp
+    """
+    from .slo_sle_policy import SloSlePolicy
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: a2a-sdp
+        """
+
+        def __init__(self):
+            super().__init__(A2aSdp)
+
+        def __get__(self, instance, owner=None) -> (
+                'A2aSdpMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['A2aSdp']:
+            pass
+
+        def __iter__(self, key) -> Iterator['A2aSdp']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'A2aSdp':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'A2aSdpMeta.yang_list_descriptor'):
+            pass
+
+
+class A2aSdp(
+        YANGListItem,
+        metaclass=A2aSdpMeta):
+    """
+    YANG list item handler.
+
+    YANG name: a2a-sdp
+    """
+
+    _yang_name: Final[str] = 'a2a-sdp'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'sdp-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sdp-id': (
+            sdp_id := YANGLeafMember(
+                'sdp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'A2aSdp':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'slo-sle-policy':
+                A2aSdpMeta.SloSlePolicy(
+                    instance),
+        }
+        return instance
+
+    @property
+    def slo_sle_policy(self) -> (
+            A2aSdpMeta.SloSlePolicy):
+        return self._yang_choices['slo-sle-policy']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py
new file mode 100644
index 000000000..fc2bfad79
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SloSlePolicyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: slo-sle-policy
+    """
+
+    from .standard import Standard
+    from .custom import Custom
+
+    class standard_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: standard
+        """
+
+        def __init__(self):
+            super().__init__(
+                SloSlePolicyMeta.Standard)
+
+        def __get__(self, instance, owner=None) -> (
+                'SloSlePolicyMeta.standard_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'SloSlePolicyMeta.Standard'):
+            pass
+
+        def __enter__(self) -> (
+                'SloSlePolicyMeta.Standard'):
+            pass
+
+    class custom_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: custom
+        """
+
+        def __init__(self):
+            super().__init__(
+                SloSlePolicyMeta.Custom)
+
+        def __get__(self, instance, owner=None) -> (
+                'SloSlePolicyMeta.custom_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'SloSlePolicyMeta.Custom'):
+            pass
+
+        def __enter__(self) -> (
+                'SloSlePolicyMeta.Custom'):
+            pass
+
+
+class SloSlePolicy(YANGChoice, metaclass=SloSlePolicyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: slo-sle-policy
+    """
+
+    _yang_name: Final[str] = 'slo-sle-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'standard': (
+            standard := (  # YANGChoiceCase(
+                SloSlePolicyMeta.
+                standard_case_descriptor())),
+
+        'custom': (
+            custom := (  # YANGChoiceCase(
+                SloSlePolicyMeta.
+                custom_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py
new file mode 100644
index 000000000..b9b068fae
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class CustomMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: custom
+    """
+    from .service_slo_sle_policy import ServiceSloSlePolicy
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: custom
+        """
+
+        def __init__(self):
+            super().__init__(Custom)
+
+        def __get__(self, instance, owner=None) -> (
+                'CustomMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Custom':
+            pass
+
+        def __enter__(self) -> 'Custom':
+            pass
+
+
+class Custom(
+        YANGContainer,
+        metaclass=CustomMeta):
+    """
+    YANG container handler.
+
+    YANG name: custom
+    """
+
+    _yang_name: Final[str] = 'custom'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'service-slo-sle-policy': (
+            service_slo_sle_policy := (  # YANGContainerMember(
+                CustomMeta.
+                ServiceSloSlePolicy.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Custom':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
new file mode 100644
index 000000000..4122e4f9e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
@@ -0,0 +1,103 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceSloSlePolicyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-slo-sle-policy
+    """
+    from .metric_bounds import MetricBounds
+    from .steering_constraints import SteeringConstraints
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-slo-sle-policy
+        """
+
+        def __init__(self):
+            super().__init__(ServiceSloSlePolicy)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceSloSlePolicyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceSloSlePolicy':
+            pass
+
+        def __enter__(self) -> 'ServiceSloSlePolicy':
+            pass
+
+
+class ServiceSloSlePolicy(
+        YANGContainer,
+        metaclass=ServiceSloSlePolicyMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-slo-sle-policy
+    """
+
+    _yang_name: Final[str] = 'service-slo-sle-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'policy-description': (
+            policy_description := YANGLeafMember(
+                'policy-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'isolation': (
+            isolation := YANGLeafMember(
+                'isolation',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'max-occupancy-level': (
+            max_occupancy_level := YANGLeafMember(
+                'max-occupancy-level',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'mtu': (
+            mtu := YANGLeafMember(
+                'mtu',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'metric-bounds': (
+            metric_bounds := (  # YANGContainerMember(
+                ServiceSloSlePolicyMeta.
+                MetricBounds.
+                yang_container_descriptor())),
+
+        'steering-constraints': (
+            steering_constraints := (  # YANGContainerMember(
+                ServiceSloSlePolicyMeta.
+                SteeringConstraints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceSloSlePolicy':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
new file mode 100644
index 000000000..a85354d58
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric-bounds
+    """
+    from .metric_bound import MetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(MetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MetricBounds':
+            pass
+
+        def __enter__(self) -> 'MetricBounds':
+            pass
+
+
+class MetricBounds(
+        YANGContainer,
+        metaclass=MetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric-bounds
+    """
+
+    _yang_name: Final[str] = 'metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'metric-bound': (
+            metric_bound := (  # YANGListMember(
+                MetricBoundsMeta.
+                MetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
new file mode 100644
index 000000000..cc3656dc1
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
@@ -0,0 +1,100 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(MetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['MetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['MetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'MetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'MetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class MetricBound(
+        YANGListItem,
+        metaclass=MetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: metric-bound
+    """
+
+    _yang_name: Final[str] = 'metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'bound': (
+            bound := YANGLeafMember(
+                'bound',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'metric-unit': (
+            metric_unit := YANGLeafMember(
+                'metric-unit',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'value-description': (
+            value_description := YANGLeafMember(
+                'value-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
new file mode 100644
index 000000000..d56e9e2c7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SteeringConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: steering-constraints
+    """
+    from .path_constraints import PathConstraints
+    from .service_function import ServiceFunction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: steering-constraints
+        """
+
+        def __init__(self):
+            super().__init__(SteeringConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'SteeringConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'SteeringConstraints':
+            pass
+
+        def __enter__(self) -> 'SteeringConstraints':
+            pass
+
+
+class SteeringConstraints(
+        YANGContainer,
+        metaclass=SteeringConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: steering-constraints
+    """
+
+    _yang_name: Final[str] = 'steering-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                SteeringConstraintsMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+
+        'service-function': (
+            service_function := (  # YANGContainerMember(
+                SteeringConstraintsMeta.
+                ServiceFunction.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SteeringConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
new file mode 100644
index 000000000..a7b789063
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
new file mode 100644
index 000000000..1b288e162
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-function
+        """
+
+        def __init__(self):
+            super().__init__(ServiceFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceFunction':
+            pass
+
+        def __enter__(self) -> 'ServiceFunction':
+            pass
+
+
+class ServiceFunction(
+        YANGContainer,
+        metaclass=ServiceFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-function
+    """
+
+    _yang_name: Final[str] = 'service-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py
new file mode 100644
index 000000000..76d271ec0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class StandardMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: standard
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: standard
+        """
+
+        def __init__(self):
+            super().__init__(Standard)
+
+        def __get__(self, instance, owner=None) -> (
+                'StandardMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Standard':
+            pass
+
+        def __enter__(self) -> 'Standard':
+            pass
+
+
+class Standard(
+        YANGContainer,
+        metaclass=StandardMeta):
+    """
+    YANG container handler.
+
+    YANG name: standard
+    """
+
+    _yang_name: Final[str] = 'standard'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'slo-sle-template': (
+            slo_sle_template := YANGLeafMember(
+                'slo-sle-template',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Standard':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py
new file mode 100644
index 000000000..bd5704163
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class P2mpMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: p2mp
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: p2mp
+        """
+
+        def __init__(self):
+            super().__init__(P2mp)
+
+        def __get__(self, instance, owner=None) -> (
+                'P2mpMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'P2mp':
+            pass
+
+        def __enter__(self) -> 'P2mp':
+            pass
+
+
+class P2mp(
+        YANGContainer,
+        metaclass=P2mpMeta):
+    """
+    YANG container handler.
+
+    YANG name: p2mp
+    """
+
+    _yang_name: Final[str] = 'p2mp'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'p2mp-sender-sdp': (
+            p2mp_sender_sdp := YANGLeafMember(
+                'p2mp-sender-sdp',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'P2mp':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py
new file mode 100644
index 000000000..e2e2f66a2
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class P2pMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: p2p
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: p2p
+        """
+
+        def __init__(self):
+            super().__init__(P2p)
+
+        def __get__(self, instance, owner=None) -> (
+                'P2pMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'P2p':
+            pass
+
+        def __enter__(self) -> 'P2p':
+            pass
+
+
+class P2p(
+        YANGContainer,
+        metaclass=P2pMeta):
+    """
+    YANG container handler.
+
+    YANG name: p2p
+    """
+
+    _yang_name: Final[str] = 'p2p'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'p2p-sender-sdp': (
+            p2p_sender_sdp := YANGLeafMember(
+                'p2p-sender-sdp',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'p2p-receiver-sdp': (
+            p2p_receiver_sdp := YANGLeafMember(
+                'p2p-receiver-sdp',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'P2p':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py
new file mode 100644
index 000000000..fc2bfad79
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SloSlePolicyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: slo-sle-policy
+    """
+
+    from .standard import Standard
+    from .custom import Custom
+
+    class standard_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: standard
+        """
+
+        def __init__(self):
+            super().__init__(
+                SloSlePolicyMeta.Standard)
+
+        def __get__(self, instance, owner=None) -> (
+                'SloSlePolicyMeta.standard_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'SloSlePolicyMeta.Standard'):
+            pass
+
+        def __enter__(self) -> (
+                'SloSlePolicyMeta.Standard'):
+            pass
+
+    class custom_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: custom
+        """
+
+        def __init__(self):
+            super().__init__(
+                SloSlePolicyMeta.Custom)
+
+        def __get__(self, instance, owner=None) -> (
+                'SloSlePolicyMeta.custom_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'SloSlePolicyMeta.Custom'):
+            pass
+
+        def __enter__(self) -> (
+                'SloSlePolicyMeta.Custom'):
+            pass
+
+
+class SloSlePolicy(YANGChoice, metaclass=SloSlePolicyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: slo-sle-policy
+    """
+
+    _yang_name: Final[str] = 'slo-sle-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'standard': (
+            standard := (  # YANGChoiceCase(
+                SloSlePolicyMeta.
+                standard_case_descriptor())),
+
+        'custom': (
+            custom := (  # YANGChoiceCase(
+                SloSlePolicyMeta.
+                custom_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py
new file mode 100644
index 000000000..b9b068fae
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class CustomMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: custom
+    """
+    from .service_slo_sle_policy import ServiceSloSlePolicy
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: custom
+        """
+
+        def __init__(self):
+            super().__init__(Custom)
+
+        def __get__(self, instance, owner=None) -> (
+                'CustomMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Custom':
+            pass
+
+        def __enter__(self) -> 'Custom':
+            pass
+
+
+class Custom(
+        YANGContainer,
+        metaclass=CustomMeta):
+    """
+    YANG container handler.
+
+    YANG name: custom
+    """
+
+    _yang_name: Final[str] = 'custom'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'service-slo-sle-policy': (
+            service_slo_sle_policy := (  # YANGContainerMember(
+                CustomMeta.
+                ServiceSloSlePolicy.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Custom':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
new file mode 100644
index 000000000..4122e4f9e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
@@ -0,0 +1,103 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceSloSlePolicyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-slo-sle-policy
+    """
+    from .metric_bounds import MetricBounds
+    from .steering_constraints import SteeringConstraints
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-slo-sle-policy
+        """
+
+        def __init__(self):
+            super().__init__(ServiceSloSlePolicy)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceSloSlePolicyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceSloSlePolicy':
+            pass
+
+        def __enter__(self) -> 'ServiceSloSlePolicy':
+            pass
+
+
+class ServiceSloSlePolicy(
+        YANGContainer,
+        metaclass=ServiceSloSlePolicyMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-slo-sle-policy
+    """
+
+    _yang_name: Final[str] = 'service-slo-sle-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'policy-description': (
+            policy_description := YANGLeafMember(
+                'policy-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'isolation': (
+            isolation := YANGLeafMember(
+                'isolation',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'max-occupancy-level': (
+            max_occupancy_level := YANGLeafMember(
+                'max-occupancy-level',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'mtu': (
+            mtu := YANGLeafMember(
+                'mtu',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'metric-bounds': (
+            metric_bounds := (  # YANGContainerMember(
+                ServiceSloSlePolicyMeta.
+                MetricBounds.
+                yang_container_descriptor())),
+
+        'steering-constraints': (
+            steering_constraints := (  # YANGContainerMember(
+                ServiceSloSlePolicyMeta.
+                SteeringConstraints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceSloSlePolicy':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
new file mode 100644
index 000000000..a85354d58
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric-bounds
+    """
+    from .metric_bound import MetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(MetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MetricBounds':
+            pass
+
+        def __enter__(self) -> 'MetricBounds':
+            pass
+
+
+class MetricBounds(
+        YANGContainer,
+        metaclass=MetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric-bounds
+    """
+
+    _yang_name: Final[str] = 'metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'metric-bound': (
+            metric_bound := (  # YANGListMember(
+                MetricBoundsMeta.
+                MetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
new file mode 100644
index 000000000..a8bcf748b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
@@ -0,0 +1,100 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(MetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['MetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['MetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'MetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'MetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class MetricBound(
+        YANGListItem,
+        metaclass=MetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: metric-bound
+    """
+
+    _yang_name: Final[str] = 'metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'value-description': (
+            value_description := YANGLeafMember(
+                'value-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'bound': (
+            bound := YANGLeafMember(
+                'bound',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'metric-unit': (
+            metric_unit := YANGLeafMember(
+                'metric-unit',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
new file mode 100644
index 000000000..9678efc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SteeringConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: steering-constraints
+    """
+    from .service_function import ServiceFunction
+    from .path_constraints import PathConstraints
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: steering-constraints
+        """
+
+        def __init__(self):
+            super().__init__(SteeringConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'SteeringConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'SteeringConstraints':
+            pass
+
+        def __enter__(self) -> 'SteeringConstraints':
+            pass
+
+
+class SteeringConstraints(
+        YANGContainer,
+        metaclass=SteeringConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: steering-constraints
+    """
+
+    _yang_name: Final[str] = 'steering-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'service-function': (
+            service_function := (  # YANGContainerMember(
+                SteeringConstraintsMeta.
+                ServiceFunction.
+                yang_container_descriptor())),
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                SteeringConstraintsMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SteeringConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
new file mode 100644
index 000000000..a7b789063
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
new file mode 100644
index 000000000..1b288e162
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-function
+        """
+
+        def __init__(self):
+            super().__init__(ServiceFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceFunction':
+            pass
+
+        def __enter__(self) -> 'ServiceFunction':
+            pass
+
+
+class ServiceFunction(
+        YANGContainer,
+        metaclass=ServiceFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-function
+    """
+
+    _yang_name: Final[str] = 'service-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py
new file mode 100644
index 000000000..76d271ec0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class StandardMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: standard
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: standard
+        """
+
+        def __init__(self):
+            super().__init__(Standard)
+
+        def __get__(self, instance, owner=None) -> (
+                'StandardMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Standard':
+            pass
+
+        def __enter__(self) -> 'Standard':
+            pass
+
+
+class Standard(
+        YANGContainer,
+        metaclass=StandardMeta):
+    """
+    YANG container handler.
+
+    YANG name: standard
+    """
+
+    _yang_name: Final[str] = 'standard'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'slo-sle-template': (
+            slo_sle_template := YANGLeafMember(
+                'slo-sle-template',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Standard':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py
new file mode 100644
index 000000000..fc2bfad79
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SloSlePolicyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: slo-sle-policy
+    """
+
+    from .standard import Standard
+    from .custom import Custom
+
+    class standard_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: standard
+        """
+
+        def __init__(self):
+            super().__init__(
+                SloSlePolicyMeta.Standard)
+
+        def __get__(self, instance, owner=None) -> (
+                'SloSlePolicyMeta.standard_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'SloSlePolicyMeta.Standard'):
+            pass
+
+        def __enter__(self) -> (
+                'SloSlePolicyMeta.Standard'):
+            pass
+
+    class custom_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: custom
+        """
+
+        def __init__(self):
+            super().__init__(
+                SloSlePolicyMeta.Custom)
+
+        def __get__(self, instance, owner=None) -> (
+                'SloSlePolicyMeta.custom_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'SloSlePolicyMeta.Custom'):
+            pass
+
+        def __enter__(self) -> (
+                'SloSlePolicyMeta.Custom'):
+            pass
+
+
+class SloSlePolicy(YANGChoice, metaclass=SloSlePolicyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: slo-sle-policy
+    """
+
+    _yang_name: Final[str] = 'slo-sle-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'standard': (
+            standard := (  # YANGChoiceCase(
+                SloSlePolicyMeta.
+                standard_case_descriptor())),
+
+        'custom': (
+            custom := (  # YANGChoiceCase(
+                SloSlePolicyMeta.
+                custom_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py
new file mode 100644
index 000000000..b9b068fae
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class CustomMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: custom
+    """
+    from .service_slo_sle_policy import ServiceSloSlePolicy
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: custom
+        """
+
+        def __init__(self):
+            super().__init__(Custom)
+
+        def __get__(self, instance, owner=None) -> (
+                'CustomMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Custom':
+            pass
+
+        def __enter__(self) -> 'Custom':
+            pass
+
+
+class Custom(
+        YANGContainer,
+        metaclass=CustomMeta):
+    """
+    YANG container handler.
+
+    YANG name: custom
+    """
+
+    _yang_name: Final[str] = 'custom'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'service-slo-sle-policy': (
+            service_slo_sle_policy := (  # YANGContainerMember(
+                CustomMeta.
+                ServiceSloSlePolicy.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Custom':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
new file mode 100644
index 000000000..7c7e41d56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
@@ -0,0 +1,103 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceSloSlePolicyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-slo-sle-policy
+    """
+    from .steering_constraints import SteeringConstraints
+    from .metric_bounds import MetricBounds
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-slo-sle-policy
+        """
+
+        def __init__(self):
+            super().__init__(ServiceSloSlePolicy)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceSloSlePolicyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceSloSlePolicy':
+            pass
+
+        def __enter__(self) -> 'ServiceSloSlePolicy':
+            pass
+
+
+class ServiceSloSlePolicy(
+        YANGContainer,
+        metaclass=ServiceSloSlePolicyMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-slo-sle-policy
+    """
+
+    _yang_name: Final[str] = 'service-slo-sle-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'isolation': (
+            isolation := YANGLeafMember(
+                'isolation',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'mtu': (
+            mtu := YANGLeafMember(
+                'mtu',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'max-occupancy-level': (
+            max_occupancy_level := YANGLeafMember(
+                'max-occupancy-level',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'policy-description': (
+            policy_description := YANGLeafMember(
+                'policy-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'steering-constraints': (
+            steering_constraints := (  # YANGContainerMember(
+                ServiceSloSlePolicyMeta.
+                SteeringConstraints.
+                yang_container_descriptor())),
+
+        'metric-bounds': (
+            metric_bounds := (  # YANGContainerMember(
+                ServiceSloSlePolicyMeta.
+                MetricBounds.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceSloSlePolicy':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
new file mode 100644
index 000000000..a85354d58
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric-bounds
+    """
+    from .metric_bound import MetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(MetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MetricBounds':
+            pass
+
+        def __enter__(self) -> 'MetricBounds':
+            pass
+
+
+class MetricBounds(
+        YANGContainer,
+        metaclass=MetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric-bounds
+    """
+
+    _yang_name: Final[str] = 'metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'metric-bound': (
+            metric_bound := (  # YANGListMember(
+                MetricBoundsMeta.
+                MetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
new file mode 100644
index 000000000..64e586fa8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
@@ -0,0 +1,100 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(MetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['MetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['MetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'MetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'MetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class MetricBound(
+        YANGListItem,
+        metaclass=MetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: metric-bound
+    """
+
+    _yang_name: Final[str] = 'metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'value-description': (
+            value_description := YANGLeafMember(
+                'value-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'bound': (
+            bound := YANGLeafMember(
+                'bound',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'metric-unit': (
+            metric_unit := YANGLeafMember(
+                'metric-unit',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
new file mode 100644
index 000000000..9678efc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SteeringConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: steering-constraints
+    """
+    from .service_function import ServiceFunction
+    from .path_constraints import PathConstraints
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: steering-constraints
+        """
+
+        def __init__(self):
+            super().__init__(SteeringConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'SteeringConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'SteeringConstraints':
+            pass
+
+        def __enter__(self) -> 'SteeringConstraints':
+            pass
+
+
+class SteeringConstraints(
+        YANGContainer,
+        metaclass=SteeringConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: steering-constraints
+    """
+
+    _yang_name: Final[str] = 'steering-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'service-function': (
+            service_function := (  # YANGContainerMember(
+                SteeringConstraintsMeta.
+                ServiceFunction.
+                yang_container_descriptor())),
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                SteeringConstraintsMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SteeringConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
new file mode 100644
index 000000000..a7b789063
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
new file mode 100644
index 000000000..1b288e162
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-function
+        """
+
+        def __init__(self):
+            super().__init__(ServiceFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceFunction':
+            pass
+
+        def __enter__(self) -> 'ServiceFunction':
+            pass
+
+
+class ServiceFunction(
+        YANGContainer,
+        metaclass=ServiceFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-function
+    """
+
+    _yang_name: Final[str] = 'service-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py
new file mode 100644
index 000000000..76d271ec0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class StandardMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: standard
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: standard
+        """
+
+        def __init__(self):
+            super().__init__(Standard)
+
+        def __get__(self, instance, owner=None) -> (
+                'StandardMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Standard':
+            pass
+
+        def __enter__(self) -> 'Standard':
+            pass
+
+
+class Standard(
+        YANGContainer,
+        metaclass=StandardMeta):
+    """
+    YANG container handler.
+
+    YANG name: standard
+    """
+
+    _yang_name: Final[str] = 'standard'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'slo-sle-template': (
+            slo_sle_template := YANGLeafMember(
+                'slo-sle-template',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Standard':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py
new file mode 100644
index 000000000..36ed8eda3
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SdpsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: sdps
+    """
+    from .sdp import Sdp
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: sdps
+        """
+
+        def __init__(self):
+            super().__init__(Sdps)
+
+        def __get__(self, instance, owner=None) -> (
+                'SdpsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Sdps':
+            pass
+
+        def __enter__(self) -> 'Sdps':
+            pass
+
+
+class Sdps(
+        YANGContainer,
+        metaclass=SdpsMeta):
+    """
+    YANG container handler.
+
+    YANG name: sdps
+    """
+
+    _yang_name: Final[str] = 'sdps'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'sdp': (
+            sdp := (  # YANGListMember(
+                SdpsMeta.
+                Sdp.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Sdps':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py
new file mode 100644
index 000000000..f606cde83
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py
@@ -0,0 +1,168 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SdpMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: sdp
+    """
+    from .sdp_monitoring import SdpMonitoring
+    from .outgoing_qos_policy import OutgoingQosPolicy
+    from .service_match_criteria import ServiceMatchCriteria
+    from .sdp_peering import SdpPeering
+    from .status import Status
+    from .attachment_circuits import AttachmentCircuits
+    from .location import Location
+    from .incoming_qos_policy import IncomingQosPolicy
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: sdp
+        """
+
+        def __init__(self):
+            super().__init__(Sdp)
+
+        def __get__(self, instance, owner=None) -> (
+                'SdpMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Sdp']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Sdp']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Sdp':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'SdpMeta.yang_list_descriptor'):
+            pass
+
+
+class Sdp(
+        YANGListItem,
+        metaclass=SdpMeta):
+    """
+    YANG list item handler.
+
+    YANG name: sdp
+    """
+
+    _yang_name: Final[str] = 'sdp'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'sdp-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sdp-id': (
+            sdp_id := YANGLeafMember(
+                'sdp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'peer-sap-id': (
+            peer_sap_id := YANGLeafMember(
+                'peer-sap-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'sdp-description': (
+            sdp_description := YANGLeafMember(
+                'sdp-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'sdp-ip': (
+            sdp_ip := YANGLeafMember(
+                'sdp-ip',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'ltp': (
+            ltp := YANGLeafMember(
+                'ltp',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'sdp-monitoring': (
+            sdp_monitoring := (  # YANGContainerMember(
+                SdpMeta.
+                SdpMonitoring.
+                yang_container_descriptor())),
+
+        'outgoing-qos-policy': (
+            outgoing_qos_policy := (  # YANGContainerMember(
+                SdpMeta.
+                OutgoingQosPolicy.
+                yang_container_descriptor())),
+
+        'service-match-criteria': (
+            service_match_criteria := (  # YANGContainerMember(
+                SdpMeta.
+                ServiceMatchCriteria.
+                yang_container_descriptor())),
+
+        'sdp-peering': (
+            sdp_peering := (  # YANGContainerMember(
+                SdpMeta.
+                SdpPeering.
+                yang_container_descriptor())),
+
+        'status': (
+            status := (  # YANGContainerMember(
+                SdpMeta.
+                Status.
+                yang_container_descriptor())),
+
+        'attachment-circuits': (
+            attachment_circuits := (  # YANGContainerMember(
+                SdpMeta.
+                AttachmentCircuits.
+                yang_container_descriptor())),
+
+        'location': (
+            location := (  # YANGContainerMember(
+                SdpMeta.
+                Location.
+                yang_container_descriptor())),
+
+        'incoming-qos-policy': (
+            incoming_qos_policy := (  # YANGContainerMember(
+                SdpMeta.
+                IncomingQosPolicy.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Sdp':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py
new file mode 100644
index 000000000..c0a13c6e8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AttachmentCircuitsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: attachment-circuits
+    """
+    from .attachment_circuit import AttachmentCircuit
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: attachment-circuits
+        """
+
+        def __init__(self):
+            super().__init__(AttachmentCircuits)
+
+        def __get__(self, instance, owner=None) -> (
+                'AttachmentCircuitsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AttachmentCircuits':
+            pass
+
+        def __enter__(self) -> 'AttachmentCircuits':
+            pass
+
+
+class AttachmentCircuits(
+        YANGContainer,
+        metaclass=AttachmentCircuitsMeta):
+    """
+    YANG container handler.
+
+    YANG name: attachment-circuits
+    """
+
+    _yang_name: Final[str] = 'attachment-circuits'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'attachment-circuit': (
+            attachment_circuit := (  # YANGListMember(
+                AttachmentCircuitsMeta.
+                AttachmentCircuit.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AttachmentCircuits':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py
new file mode 100644
index 000000000..714506d68
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py
@@ -0,0 +1,152 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AttachmentCircuitMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: attachment-circuit
+    """
+    from .ac_tags import AcTags
+    from .outgoing_qos_policy import OutgoingQosPolicy
+    from .incoming_qos_policy import IncomingQosPolicy
+    from .sdp_peering import SdpPeering
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: attachment-circuit
+        """
+
+        def __init__(self):
+            super().__init__(AttachmentCircuit)
+
+        def __get__(self, instance, owner=None) -> (
+                'AttachmentCircuitMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AttachmentCircuit']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AttachmentCircuit']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AttachmentCircuit':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AttachmentCircuitMeta.yang_list_descriptor'):
+            pass
+
+
+class AttachmentCircuit(
+        YANGListItem,
+        metaclass=AttachmentCircuitMeta):
+    """
+    YANG list item handler.
+
+    YANG name: attachment-circuit
+    """
+
+    _yang_name: Final[str] = 'attachment-circuit'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'ac-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'ac-node-id': (
+            ac_node_id := YANGLeafMember(
+                'ac-node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'ac-tp-id': (
+            ac_tp_id := YANGLeafMember(
+                'ac-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'ac-ip-prefix-length': (
+            ac_ip_prefix_length := YANGLeafMember(
+                'ac-ip-prefix-length',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'ac-ip-address': (
+            ac_ip_address := YANGLeafMember(
+                'ac-ip-address',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'mtu': (
+            mtu := YANGLeafMember(
+                'mtu',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'ac-description': (
+            ac_description := YANGLeafMember(
+                'ac-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'ac-id': (
+            ac_id := YANGLeafMember(
+                'ac-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'peer-sap-id': (
+            peer_sap_id := YANGLeafMember(
+                'peer-sap-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'ac-tags': (
+            ac_tags := (  # YANGContainerMember(
+                AttachmentCircuitMeta.
+                AcTags.
+                yang_container_descriptor())),
+
+        'outgoing-qos-policy': (
+            outgoing_qos_policy := (  # YANGContainerMember(
+                AttachmentCircuitMeta.
+                OutgoingQosPolicy.
+                yang_container_descriptor())),
+
+        'incoming-qos-policy': (
+            incoming_qos_policy := (  # YANGContainerMember(
+                AttachmentCircuitMeta.
+                IncomingQosPolicy.
+                yang_container_descriptor())),
+
+        'sdp-peering': (
+            sdp_peering := (  # YANGContainerMember(
+                AttachmentCircuitMeta.
+                SdpPeering.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AttachmentCircuit':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py
new file mode 100644
index 000000000..94acd5265
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AcTagsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: ac-tags
+    """
+    from .ac_tags import AcTags
+    from .ac_tag_opaque import AcTagOpaque
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: ac-tags
+        """
+
+        def __init__(self):
+            super().__init__(AcTags)
+
+        def __get__(self, instance, owner=None) -> (
+                'AcTagsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AcTags':
+            pass
+
+        def __enter__(self) -> 'AcTags':
+            pass
+
+
+class AcTags(
+        YANGContainer,
+        metaclass=AcTagsMeta):
+    """
+    YANG container handler.
+
+    YANG name: ac-tags
+    """
+
+    _yang_name: Final[str] = 'ac-tags'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'ac-tags': (
+            ac_tags := (  # YANGListMember(
+                AcTagsMeta.
+                AcTags.
+                yang_list_descriptor())),
+
+        'ac-tag-opaque': (
+            ac_tag_opaque := (  # YANGListMember(
+                AcTagsMeta.
+                AcTagOpaque.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AcTags':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py
new file mode 100644
index 000000000..d0c7ce4f8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AcTagOpaqueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: ac-tag-opaque
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: ac-tag-opaque
+        """
+
+        def __init__(self):
+            super().__init__(AcTagOpaque)
+
+        def __get__(self, instance, owner=None) -> (
+                'AcTagOpaqueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AcTagOpaque']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AcTagOpaque']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AcTagOpaque':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AcTagOpaqueMeta.yang_list_descriptor'):
+            pass
+
+
+class AcTagOpaque(
+        YANGListItem,
+        metaclass=AcTagOpaqueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: ac-tag-opaque
+    """
+
+    _yang_name: Final[str] = 'ac-tag-opaque'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tag-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tag-name': (
+            tag_name := YANGLeafMember(
+                'tag-name',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AcTagOpaque':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py
new file mode 100644
index 000000000..3e07668ab
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AcTagsMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: ac-tags
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: ac-tags
+        """
+
+        def __init__(self):
+            super().__init__(AcTags)
+
+        def __get__(self, instance, owner=None) -> (
+                'AcTagsMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AcTags']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AcTags']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AcTags':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AcTagsMeta.yang_list_descriptor'):
+            pass
+
+
+class AcTags(
+        YANGListItem,
+        metaclass=AcTagsMeta):
+    """
+    YANG list item handler.
+
+    YANG name: ac-tags
+    """
+
+    _yang_name: Final[str] = 'ac-tags'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'ac-tag-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'ac-tag-type': (
+            ac_tag_type := YANGLeafMember(
+                'ac-tag-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AcTags':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py
new file mode 100644
index 000000000..fb40100df
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class IncomingQosPolicyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: incoming-qos-policy
+    """
+    from .rate_limits import RateLimits
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: incoming-qos-policy
+        """
+
+        def __init__(self):
+            super().__init__(IncomingQosPolicy)
+
+        def __get__(self, instance, owner=None) -> (
+                'IncomingQosPolicyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'IncomingQosPolicy':
+            pass
+
+        def __enter__(self) -> 'IncomingQosPolicy':
+            pass
+
+
+class IncomingQosPolicy(
+        YANGContainer,
+        metaclass=IncomingQosPolicyMeta):
+    """
+    YANG container handler.
+
+    YANG name: incoming-qos-policy
+    """
+
+    _yang_name: Final[str] = 'incoming-qos-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'qos-policy-name': (
+            qos_policy_name := YANGLeafMember(
+                'qos-policy-name',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'rate-limits': (
+            rate_limits := (  # YANGContainerMember(
+                IncomingQosPolicyMeta.
+                RateLimits.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'IncomingQosPolicy':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py
new file mode 100644
index 000000000..b8c423c71
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py
@@ -0,0 +1,101 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RateLimitsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: rate-limits
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: rate-limits
+        """
+
+        def __init__(self):
+            super().__init__(RateLimits)
+
+        def __get__(self, instance, owner=None) -> (
+                'RateLimitsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'RateLimits':
+            pass
+
+        def __enter__(self) -> 'RateLimits':
+            pass
+
+
+class RateLimits(
+        YANGContainer,
+        metaclass=RateLimitsMeta):
+    """
+    YANG container handler.
+
+    YANG name: rate-limits
+    """
+
+    _yang_name: Final[str] = 'rate-limits'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'cir': (
+            cir := YANGLeafMember(
+                'cir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'cbs': (
+            cbs := YANGLeafMember(
+                'cbs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'pir': (
+            pir := YANGLeafMember(
+                'pir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'pbs': (
+            pbs := YANGLeafMember(
+                'pbs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'eir': (
+            eir := YANGLeafMember(
+                'eir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'ebs': (
+            ebs := YANGLeafMember(
+                'ebs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RateLimits':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py
new file mode 100644
index 000000000..dd706e644
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OutgoingQosPolicyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: outgoing-qos-policy
+    """
+    from .rate_limits import RateLimits
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: outgoing-qos-policy
+        """
+
+        def __init__(self):
+            super().__init__(OutgoingQosPolicy)
+
+        def __get__(self, instance, owner=None) -> (
+                'OutgoingQosPolicyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'OutgoingQosPolicy':
+            pass
+
+        def __enter__(self) -> 'OutgoingQosPolicy':
+            pass
+
+
+class OutgoingQosPolicy(
+        YANGContainer,
+        metaclass=OutgoingQosPolicyMeta):
+    """
+    YANG container handler.
+
+    YANG name: outgoing-qos-policy
+    """
+
+    _yang_name: Final[str] = 'outgoing-qos-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'qos-policy-name': (
+            qos_policy_name := YANGLeafMember(
+                'qos-policy-name',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'rate-limits': (
+            rate_limits := (  # YANGContainerMember(
+                OutgoingQosPolicyMeta.
+                RateLimits.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'OutgoingQosPolicy':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py
new file mode 100644
index 000000000..2b15a858a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py
@@ -0,0 +1,101 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RateLimitsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: rate-limits
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: rate-limits
+        """
+
+        def __init__(self):
+            super().__init__(RateLimits)
+
+        def __get__(self, instance, owner=None) -> (
+                'RateLimitsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'RateLimits':
+            pass
+
+        def __enter__(self) -> 'RateLimits':
+            pass
+
+
+class RateLimits(
+        YANGContainer,
+        metaclass=RateLimitsMeta):
+    """
+    YANG container handler.
+
+    YANG name: rate-limits
+    """
+
+    _yang_name: Final[str] = 'rate-limits'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'cbs': (
+            cbs := YANGLeafMember(
+                'cbs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'ebs': (
+            ebs := YANGLeafMember(
+                'ebs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'pbs': (
+            pbs := YANGLeafMember(
+                'pbs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'cir': (
+            cir := YANGLeafMember(
+                'cir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'pir': (
+            pir := YANGLeafMember(
+                'pir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'eir': (
+            eir := YANGLeafMember(
+                'eir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RateLimits':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py
new file mode 100644
index 000000000..d8fa62e25
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SdpPeeringMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: sdp-peering
+    """
+    from .opaque import Opaque
+    from .protocol import Protocol
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: sdp-peering
+        """
+
+        def __init__(self):
+            super().__init__(SdpPeering)
+
+        def __get__(self, instance, owner=None) -> (
+                'SdpPeeringMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'SdpPeering':
+            pass
+
+        def __enter__(self) -> 'SdpPeering':
+            pass
+
+
+class SdpPeering(
+        YANGContainer,
+        metaclass=SdpPeeringMeta):
+    """
+    YANG container handler.
+
+    YANG name: sdp-peering
+    """
+
+    _yang_name: Final[str] = 'sdp-peering'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'opaque': (
+            opaque := (  # YANGListMember(
+                SdpPeeringMeta.
+                Opaque.
+                yang_list_descriptor())),
+
+        'protocol': (
+            protocol := (  # YANGListMember(
+                SdpPeeringMeta.
+                Protocol.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SdpPeering':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py
new file mode 100644
index 000000000..4ef3c1735
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OpaqueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: opaque
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: opaque
+        """
+
+        def __init__(self):
+            super().__init__(Opaque)
+
+        def __get__(self, instance, owner=None) -> (
+                'OpaqueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Opaque']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Opaque']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Opaque':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'OpaqueMeta.yang_list_descriptor'):
+            pass
+
+
+class Opaque(
+        YANGListItem,
+        metaclass=OpaqueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: opaque
+    """
+
+    _yang_name: Final[str] = 'opaque'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'attribute-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'attribute-name': (
+            attribute_name := YANGLeafMember(
+                'attribute-name',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Opaque':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py
new file mode 100644
index 000000000..a119a7389
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ProtocolMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: protocol
+    """
+    from .attribute import Attribute
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: protocol
+        """
+
+        def __init__(self):
+            super().__init__(Protocol)
+
+        def __get__(self, instance, owner=None) -> (
+                'ProtocolMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Protocol']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Protocol']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Protocol':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'ProtocolMeta.yang_list_descriptor'):
+            pass
+
+
+class Protocol(
+        YANGListItem,
+        metaclass=ProtocolMeta):
+    """
+    YANG list item handler.
+
+    YANG name: protocol
+    """
+
+    _yang_name: Final[str] = 'protocol'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'protocol-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'protocol-type': (
+            protocol_type := YANGLeafMember(
+                'protocol-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'attribute': (
+            attribute := (  # YANGListMember(
+                ProtocolMeta.
+                Attribute.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Protocol':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py
new file mode 100644
index 000000000..4e98f0c5b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AttributeMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: attribute
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: attribute
+        """
+
+        def __init__(self):
+            super().__init__(Attribute)
+
+        def __get__(self, instance, owner=None) -> (
+                'AttributeMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Attribute']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Attribute']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Attribute':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AttributeMeta.yang_list_descriptor'):
+            pass
+
+
+class Attribute(
+        YANGListItem,
+        metaclass=AttributeMeta):
+    """
+    YANG list item handler.
+
+    YANG name: attribute
+    """
+
+    _yang_name: Final[str] = 'attribute'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'attribute-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'attribute-type': (
+            attribute_type := YANGLeafMember(
+                'attribute-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Attribute':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py
new file mode 100644
index 000000000..fb40100df
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class IncomingQosPolicyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: incoming-qos-policy
+    """
+    from .rate_limits import RateLimits
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: incoming-qos-policy
+        """
+
+        def __init__(self):
+            super().__init__(IncomingQosPolicy)
+
+        def __get__(self, instance, owner=None) -> (
+                'IncomingQosPolicyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'IncomingQosPolicy':
+            pass
+
+        def __enter__(self) -> 'IncomingQosPolicy':
+            pass
+
+
+class IncomingQosPolicy(
+        YANGContainer,
+        metaclass=IncomingQosPolicyMeta):
+    """
+    YANG container handler.
+
+    YANG name: incoming-qos-policy
+    """
+
+    _yang_name: Final[str] = 'incoming-qos-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'qos-policy-name': (
+            qos_policy_name := YANGLeafMember(
+                'qos-policy-name',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'rate-limits': (
+            rate_limits := (  # YANGContainerMember(
+                IncomingQosPolicyMeta.
+                RateLimits.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'IncomingQosPolicy':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py
new file mode 100644
index 000000000..0ac7522db
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py
@@ -0,0 +1,101 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RateLimitsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: rate-limits
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: rate-limits
+        """
+
+        def __init__(self):
+            super().__init__(RateLimits)
+
+        def __get__(self, instance, owner=None) -> (
+                'RateLimitsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'RateLimits':
+            pass
+
+        def __enter__(self) -> 'RateLimits':
+            pass
+
+
+class RateLimits(
+        YANGContainer,
+        metaclass=RateLimitsMeta):
+    """
+    YANG container handler.
+
+    YANG name: rate-limits
+    """
+
+    _yang_name: Final[str] = 'rate-limits'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'cbs': (
+            cbs := YANGLeafMember(
+                'cbs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'eir': (
+            eir := YANGLeafMember(
+                'eir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'pir': (
+            pir := YANGLeafMember(
+                'pir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'pbs': (
+            pbs := YANGLeafMember(
+                'pbs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'cir': (
+            cir := YANGLeafMember(
+                'cir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'ebs': (
+            ebs := YANGLeafMember(
+                'ebs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RateLimits':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py
new file mode 100644
index 000000000..4d44a9b84
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LocationMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: location
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: location
+        """
+
+        def __init__(self):
+            super().__init__(Location)
+
+        def __get__(self, instance, owner=None) -> (
+                'LocationMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Location':
+            pass
+
+        def __enter__(self) -> 'Location':
+            pass
+
+
+class Location(
+        YANGContainer,
+        metaclass=LocationMeta):
+    """
+    YANG container handler.
+
+    YANG name: location
+    """
+
+    _yang_name: Final[str] = 'location'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'altitude': (
+            altitude := YANGLeafMember(
+                'altitude',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'latitude': (
+            latitude := YANGLeafMember(
+                'latitude',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'longitude': (
+            longitude := YANGLeafMember(
+                'longitude',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Location':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py
new file mode 100644
index 000000000..dd706e644
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OutgoingQosPolicyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: outgoing-qos-policy
+    """
+    from .rate_limits import RateLimits
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: outgoing-qos-policy
+        """
+
+        def __init__(self):
+            super().__init__(OutgoingQosPolicy)
+
+        def __get__(self, instance, owner=None) -> (
+                'OutgoingQosPolicyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'OutgoingQosPolicy':
+            pass
+
+        def __enter__(self) -> 'OutgoingQosPolicy':
+            pass
+
+
+class OutgoingQosPolicy(
+        YANGContainer,
+        metaclass=OutgoingQosPolicyMeta):
+    """
+    YANG container handler.
+
+    YANG name: outgoing-qos-policy
+    """
+
+    _yang_name: Final[str] = 'outgoing-qos-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'qos-policy-name': (
+            qos_policy_name := YANGLeafMember(
+                'qos-policy-name',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'rate-limits': (
+            rate_limits := (  # YANGContainerMember(
+                OutgoingQosPolicyMeta.
+                RateLimits.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'OutgoingQosPolicy':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py
new file mode 100644
index 000000000..61ca29b6e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py
@@ -0,0 +1,101 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RateLimitsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: rate-limits
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: rate-limits
+        """
+
+        def __init__(self):
+            super().__init__(RateLimits)
+
+        def __get__(self, instance, owner=None) -> (
+                'RateLimitsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'RateLimits':
+            pass
+
+        def __enter__(self) -> 'RateLimits':
+            pass
+
+
+class RateLimits(
+        YANGContainer,
+        metaclass=RateLimitsMeta):
+    """
+    YANG container handler.
+
+    YANG name: rate-limits
+    """
+
+    _yang_name: Final[str] = 'rate-limits'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'eir': (
+            eir := YANGLeafMember(
+                'eir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'cir': (
+            cir := YANGLeafMember(
+                'cir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'pir': (
+            pir := YANGLeafMember(
+                'pir',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'pbs': (
+            pbs := YANGLeafMember(
+                'pbs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'cbs': (
+            cbs := YANGLeafMember(
+                'cbs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'ebs': (
+            ebs := YANGLeafMember(
+                'ebs',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RateLimits':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py
new file mode 100644
index 000000000..cc281d83b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SdpMonitoringMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: sdp-monitoring
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: sdp-monitoring
+        """
+
+        def __init__(self):
+            super().__init__(SdpMonitoring)
+
+        def __get__(self, instance, owner=None) -> (
+                'SdpMonitoringMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'SdpMonitoring':
+            pass
+
+        def __enter__(self) -> 'SdpMonitoring':
+            pass
+
+
+class SdpMonitoring(
+        YANGContainer,
+        metaclass=SdpMonitoringMeta):
+    """
+    YANG container handler.
+
+    YANG name: sdp-monitoring
+    """
+
+    _yang_name: Final[str] = 'sdp-monitoring'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'incoming-utilized-bandwidth': (
+            incoming_utilized_bandwidth := YANGLeafMember(
+                'incoming-utilized-bandwidth',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'incoming-bw-utilization': (
+            incoming_bw_utilization := YANGLeafMember(
+                'incoming-bw-utilization',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'outgoing-bw-utilization': (
+            outgoing_bw_utilization := YANGLeafMember(
+                'outgoing-bw-utilization',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'outgoing-utilized-bandwidth': (
+            outgoing_utilized_bandwidth := YANGLeafMember(
+                'outgoing-utilized-bandwidth',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SdpMonitoring':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py
new file mode 100644
index 000000000..7eff54fa2
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SdpPeeringMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: sdp-peering
+    """
+    from .protocol import Protocol
+    from .opaque import Opaque
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: sdp-peering
+        """
+
+        def __init__(self):
+            super().__init__(SdpPeering)
+
+        def __get__(self, instance, owner=None) -> (
+                'SdpPeeringMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'SdpPeering':
+            pass
+
+        def __enter__(self) -> 'SdpPeering':
+            pass
+
+
+class SdpPeering(
+        YANGContainer,
+        metaclass=SdpPeeringMeta):
+    """
+    YANG container handler.
+
+    YANG name: sdp-peering
+    """
+
+    _yang_name: Final[str] = 'sdp-peering'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'protocol': (
+            protocol := (  # YANGListMember(
+                SdpPeeringMeta.
+                Protocol.
+                yang_list_descriptor())),
+
+        'opaque': (
+            opaque := (  # YANGListMember(
+                SdpPeeringMeta.
+                Opaque.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SdpPeering':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py
new file mode 100644
index 000000000..4ef3c1735
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OpaqueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: opaque
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: opaque
+        """
+
+        def __init__(self):
+            super().__init__(Opaque)
+
+        def __get__(self, instance, owner=None) -> (
+                'OpaqueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Opaque']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Opaque']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Opaque':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'OpaqueMeta.yang_list_descriptor'):
+            pass
+
+
+class Opaque(
+        YANGListItem,
+        metaclass=OpaqueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: opaque
+    """
+
+    _yang_name: Final[str] = 'opaque'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'attribute-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'attribute-name': (
+            attribute_name := YANGLeafMember(
+                'attribute-name',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Opaque':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py
new file mode 100644
index 000000000..a119a7389
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ProtocolMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: protocol
+    """
+    from .attribute import Attribute
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: protocol
+        """
+
+        def __init__(self):
+            super().__init__(Protocol)
+
+        def __get__(self, instance, owner=None) -> (
+                'ProtocolMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Protocol']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Protocol']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Protocol':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'ProtocolMeta.yang_list_descriptor'):
+            pass
+
+
+class Protocol(
+        YANGListItem,
+        metaclass=ProtocolMeta):
+    """
+    YANG list item handler.
+
+    YANG name: protocol
+    """
+
+    _yang_name: Final[str] = 'protocol'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'protocol-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'protocol-type': (
+            protocol_type := YANGLeafMember(
+                'protocol-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'attribute': (
+            attribute := (  # YANGListMember(
+                ProtocolMeta.
+                Attribute.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Protocol':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py
new file mode 100644
index 000000000..4e98f0c5b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AttributeMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: attribute
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: attribute
+        """
+
+        def __init__(self):
+            super().__init__(Attribute)
+
+        def __get__(self, instance, owner=None) -> (
+                'AttributeMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Attribute']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Attribute']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Attribute':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AttributeMeta.yang_list_descriptor'):
+            pass
+
+
+class Attribute(
+        YANGListItem,
+        metaclass=AttributeMeta):
+    """
+    YANG list item handler.
+
+    YANG name: attribute
+    """
+
+    _yang_name: Final[str] = 'attribute'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'attribute-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'attribute-type': (
+            attribute_type := YANGLeafMember(
+                'attribute-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Attribute':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py
new file mode 100644
index 000000000..e284679b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceMatchCriteriaMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-match-criteria
+    """
+    from .match_criterion import MatchCriterion
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-match-criteria
+        """
+
+        def __init__(self):
+            super().__init__(ServiceMatchCriteria)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceMatchCriteriaMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceMatchCriteria':
+            pass
+
+        def __enter__(self) -> 'ServiceMatchCriteria':
+            pass
+
+
+class ServiceMatchCriteria(
+        YANGContainer,
+        metaclass=ServiceMatchCriteriaMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-match-criteria
+    """
+
+    _yang_name: Final[str] = 'service-match-criteria'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'match-criterion': (
+            match_criterion := (  # YANGListMember(
+                ServiceMatchCriteriaMeta.
+                MatchCriterion.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceMatchCriteria':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py
new file mode 100644
index 000000000..5db2105c8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py
@@ -0,0 +1,106 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MatchCriterionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: match-criterion
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: match-criterion
+        """
+
+        def __init__(self):
+            super().__init__(MatchCriterion)
+
+        def __get__(self, instance, owner=None) -> (
+                'MatchCriterionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['MatchCriterion']:
+            pass
+
+        def __iter__(self, key) -> Iterator['MatchCriterion']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'MatchCriterion':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'MatchCriterionMeta.yang_list_descriptor'):
+            pass
+
+
+class MatchCriterion(
+        YANGListItem,
+        metaclass=MatchCriterionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: match-criterion
+    """
+
+    _yang_name: Final[str] = 'match-criterion'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'connection-group-sdp-role': (
+            connection_group_sdp_role := YANGLeafMember(
+                'connection-group-sdp-role',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'target-connection-group-id': (
+            target_connection_group_id := YANGLeafMember(
+                'target-connection-group-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'target-connectivity-construct-id': (
+            target_connectivity_construct_id := YANGLeafMember(
+                'target-connectivity-construct-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'match-type': (
+            match_type := YANGLeafMember(
+                'match-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MatchCriterion':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py
new file mode 100644
index 000000000..f70b5244e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class StatusMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: status
+    """
+    from .oper_status import OperStatus
+    from .admin_status import AdminStatus
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: status
+        """
+
+        def __init__(self):
+            super().__init__(Status)
+
+        def __get__(self, instance, owner=None) -> (
+                'StatusMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Status':
+            pass
+
+        def __enter__(self) -> 'Status':
+            pass
+
+
+class Status(
+        YANGContainer,
+        metaclass=StatusMeta):
+    """
+    YANG container handler.
+
+    YANG name: status
+    """
+
+    _yang_name: Final[str] = 'status'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'oper-status': (
+            oper_status := (  # YANGContainerMember(
+                StatusMeta.
+                OperStatus.
+                yang_container_descriptor())),
+
+        'admin-status': (
+            admin_status := (  # YANGContainerMember(
+                StatusMeta.
+                AdminStatus.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Status':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py
new file mode 100644
index 000000000..1bb301fc8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AdminStatusMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: admin-status
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: admin-status
+        """
+
+        def __init__(self):
+            super().__init__(AdminStatus)
+
+        def __get__(self, instance, owner=None) -> (
+                'AdminStatusMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AdminStatus':
+            pass
+
+        def __enter__(self) -> 'AdminStatus':
+            pass
+
+
+class AdminStatus(
+        YANGContainer,
+        metaclass=AdminStatusMeta):
+    """
+    YANG container handler.
+
+    YANG name: admin-status
+    """
+
+    _yang_name: Final[str] = 'admin-status'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'last-change': (
+            last_change := YANGLeafMember(
+                'last-change',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'status': (
+            status := YANGLeafMember(
+                'status',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AdminStatus':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py
new file mode 100644
index 000000000..d9671f880
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OperStatusMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: oper-status
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: oper-status
+        """
+
+        def __init__(self):
+            super().__init__(OperStatus)
+
+        def __get__(self, instance, owner=None) -> (
+                'OperStatusMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'OperStatus':
+            pass
+
+        def __enter__(self) -> 'OperStatus':
+            pass
+
+
+class OperStatus(
+        YANGContainer,
+        metaclass=OperStatusMeta):
+    """
+    YANG container handler.
+
+    YANG name: oper-status
+    """
+
+    _yang_name: Final[str] = 'oper-status'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'status': (
+            status := YANGLeafMember(
+                'status',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'last-change': (
+            last_change := YANGLeafMember(
+                'last-change',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'OperStatus':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py
new file mode 100644
index 000000000..f7c6c5058
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceTagsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-tags
+    """
+    from .tag_opaque import TagOpaque
+    from .tag_type import TagType
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-tags
+        """
+
+        def __init__(self):
+            super().__init__(ServiceTags)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceTagsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceTags':
+            pass
+
+        def __enter__(self) -> 'ServiceTags':
+            pass
+
+
+class ServiceTags(
+        YANGContainer,
+        metaclass=ServiceTagsMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-tags
+    """
+
+    _yang_name: Final[str] = 'service-tags'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tag-opaque': (
+            tag_opaque := (  # YANGListMember(
+                ServiceTagsMeta.
+                TagOpaque.
+                yang_list_descriptor())),
+
+        'tag-type': (
+            tag_type := (  # YANGListMember(
+                ServiceTagsMeta.
+                TagType.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceTags':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py
new file mode 100644
index 000000000..0d77cefd7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TagOpaqueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tag-opaque
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tag-opaque
+        """
+
+        def __init__(self):
+            super().__init__(TagOpaque)
+
+        def __get__(self, instance, owner=None) -> (
+                'TagOpaqueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['TagOpaque']:
+            pass
+
+        def __iter__(self, key) -> Iterator['TagOpaque']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'TagOpaque':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TagOpaqueMeta.yang_list_descriptor'):
+            pass
+
+
+class TagOpaque(
+        YANGListItem,
+        metaclass=TagOpaqueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tag-opaque
+    """
+
+    _yang_name: Final[str] = 'tag-opaque'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tag-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tag-name': (
+            tag_name := YANGLeafMember(
+                'tag-name',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TagOpaque':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py
new file mode 100644
index 000000000..91b434f3c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TagTypeMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tag-type
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tag-type
+        """
+
+        def __init__(self):
+            super().__init__(TagType)
+
+        def __get__(self, instance, owner=None) -> (
+                'TagTypeMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['TagType']:
+            pass
+
+        def __iter__(self, key) -> Iterator['TagType']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'TagType':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TagTypeMeta.yang_list_descriptor'):
+            pass
+
+
+class TagType(
+        YANGListItem,
+        metaclass=TagTypeMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tag-type
+    """
+
+    _yang_name: Final[str] = 'tag-type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tag-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tag-type': (
+            tag_type := YANGLeafMember(
+                'tag-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TagType':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py
new file mode 100644
index 000000000..fc2bfad79
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SloSlePolicyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: slo-sle-policy
+    """
+
+    from .standard import Standard
+    from .custom import Custom
+
+    class standard_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: standard
+        """
+
+        def __init__(self):
+            super().__init__(
+                SloSlePolicyMeta.Standard)
+
+        def __get__(self, instance, owner=None) -> (
+                'SloSlePolicyMeta.standard_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'SloSlePolicyMeta.Standard'):
+            pass
+
+        def __enter__(self) -> (
+                'SloSlePolicyMeta.Standard'):
+            pass
+
+    class custom_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: custom
+        """
+
+        def __init__(self):
+            super().__init__(
+                SloSlePolicyMeta.Custom)
+
+        def __get__(self, instance, owner=None) -> (
+                'SloSlePolicyMeta.custom_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'SloSlePolicyMeta.Custom'):
+            pass
+
+        def __enter__(self) -> (
+                'SloSlePolicyMeta.Custom'):
+            pass
+
+
+class SloSlePolicy(YANGChoice, metaclass=SloSlePolicyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: slo-sle-policy
+    """
+
+    _yang_name: Final[str] = 'slo-sle-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'standard': (
+            standard := (  # YANGChoiceCase(
+                SloSlePolicyMeta.
+                standard_case_descriptor())),
+
+        'custom': (
+            custom := (  # YANGChoiceCase(
+                SloSlePolicyMeta.
+                custom_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py
new file mode 100644
index 000000000..b9b068fae
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class CustomMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: custom
+    """
+    from .service_slo_sle_policy import ServiceSloSlePolicy
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: custom
+        """
+
+        def __init__(self):
+            super().__init__(Custom)
+
+        def __get__(self, instance, owner=None) -> (
+                'CustomMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Custom':
+            pass
+
+        def __enter__(self) -> 'Custom':
+            pass
+
+
+class Custom(
+        YANGContainer,
+        metaclass=CustomMeta):
+    """
+    YANG container handler.
+
+    YANG name: custom
+    """
+
+    _yang_name: Final[str] = 'custom'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'service-slo-sle-policy': (
+            service_slo_sle_policy := (  # YANGContainerMember(
+                CustomMeta.
+                ServiceSloSlePolicy.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Custom':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
new file mode 100644
index 000000000..1ec026683
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
@@ -0,0 +1,103 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceSloSlePolicyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-slo-sle-policy
+    """
+    from .steering_constraints import SteeringConstraints
+    from .metric_bounds import MetricBounds
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-slo-sle-policy
+        """
+
+        def __init__(self):
+            super().__init__(ServiceSloSlePolicy)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceSloSlePolicyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceSloSlePolicy':
+            pass
+
+        def __enter__(self) -> 'ServiceSloSlePolicy':
+            pass
+
+
+class ServiceSloSlePolicy(
+        YANGContainer,
+        metaclass=ServiceSloSlePolicyMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-slo-sle-policy
+    """
+
+    _yang_name: Final[str] = 'service-slo-sle-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'mtu': (
+            mtu := YANGLeafMember(
+                'mtu',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'max-occupancy-level': (
+            max_occupancy_level := YANGLeafMember(
+                'max-occupancy-level',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'isolation': (
+            isolation := YANGLeafMember(
+                'isolation',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'policy-description': (
+            policy_description := YANGLeafMember(
+                'policy-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'steering-constraints': (
+            steering_constraints := (  # YANGContainerMember(
+                ServiceSloSlePolicyMeta.
+                SteeringConstraints.
+                yang_container_descriptor())),
+
+        'metric-bounds': (
+            metric_bounds := (  # YANGContainerMember(
+                ServiceSloSlePolicyMeta.
+                MetricBounds.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceSloSlePolicy':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
new file mode 100644
index 000000000..a85354d58
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric-bounds
+    """
+    from .metric_bound import MetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(MetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MetricBounds':
+            pass
+
+        def __enter__(self) -> 'MetricBounds':
+            pass
+
+
+class MetricBounds(
+        YANGContainer,
+        metaclass=MetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric-bounds
+    """
+
+    _yang_name: Final[str] = 'metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'metric-bound': (
+            metric_bound := (  # YANGListMember(
+                MetricBoundsMeta.
+                MetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
new file mode 100644
index 000000000..8c7ebb304
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
@@ -0,0 +1,100 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(MetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['MetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['MetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'MetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'MetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class MetricBound(
+        YANGListItem,
+        metaclass=MetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: metric-bound
+    """
+
+    _yang_name: Final[str] = 'metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'value-description': (
+            value_description := YANGLeafMember(
+                'value-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'bound': (
+            bound := YANGLeafMember(
+                'bound',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'metric-unit': (
+            metric_unit := YANGLeafMember(
+                'metric-unit',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
new file mode 100644
index 000000000..d56e9e2c7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SteeringConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: steering-constraints
+    """
+    from .path_constraints import PathConstraints
+    from .service_function import ServiceFunction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: steering-constraints
+        """
+
+        def __init__(self):
+            super().__init__(SteeringConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'SteeringConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'SteeringConstraints':
+            pass
+
+        def __enter__(self) -> 'SteeringConstraints':
+            pass
+
+
+class SteeringConstraints(
+        YANGContainer,
+        metaclass=SteeringConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: steering-constraints
+    """
+
+    _yang_name: Final[str] = 'steering-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                SteeringConstraintsMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+
+        'service-function': (
+            service_function := (  # YANGContainerMember(
+                SteeringConstraintsMeta.
+                ServiceFunction.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SteeringConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
new file mode 100644
index 000000000..a7b789063
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
new file mode 100644
index 000000000..1b288e162
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-function
+        """
+
+        def __init__(self):
+            super().__init__(ServiceFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceFunction':
+            pass
+
+        def __enter__(self) -> 'ServiceFunction':
+            pass
+
+
+class ServiceFunction(
+        YANGContainer,
+        metaclass=ServiceFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-function
+    """
+
+    _yang_name: Final[str] = 'service-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py
new file mode 100644
index 000000000..76d271ec0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class StandardMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: standard
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: standard
+        """
+
+        def __init__(self):
+            super().__init__(Standard)
+
+        def __get__(self, instance, owner=None) -> (
+                'StandardMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Standard':
+            pass
+
+        def __enter__(self) -> 'Standard':
+            pass
+
+
+class Standard(
+        YANGContainer,
+        metaclass=StandardMeta):
+    """
+    YANG container handler.
+
+    YANG name: standard
+    """
+
+    _yang_name: Final[str] = 'standard'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'slo-sle-template': (
+            slo_sle_template := YANGLeafMember(
+                'slo-sle-template',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Standard':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py
new file mode 100644
index 000000000..18698a183
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class StatusMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: status
+    """
+    from .admin_status import AdminStatus
+    from .oper_status import OperStatus
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: status
+        """
+
+        def __init__(self):
+            super().__init__(Status)
+
+        def __get__(self, instance, owner=None) -> (
+                'StatusMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Status':
+            pass
+
+        def __enter__(self) -> 'Status':
+            pass
+
+
+class Status(
+        YANGContainer,
+        metaclass=StatusMeta):
+    """
+    YANG container handler.
+
+    YANG name: status
+    """
+
+    _yang_name: Final[str] = 'status'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'admin-status': (
+            admin_status := (  # YANGContainerMember(
+                StatusMeta.
+                AdminStatus.
+                yang_container_descriptor())),
+
+        'oper-status': (
+            oper_status := (  # YANGContainerMember(
+                StatusMeta.
+                OperStatus.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Status':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py
new file mode 100644
index 000000000..1bb301fc8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AdminStatusMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: admin-status
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: admin-status
+        """
+
+        def __init__(self):
+            super().__init__(AdminStatus)
+
+        def __get__(self, instance, owner=None) -> (
+                'AdminStatusMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AdminStatus':
+            pass
+
+        def __enter__(self) -> 'AdminStatus':
+            pass
+
+
+class AdminStatus(
+        YANGContainer,
+        metaclass=AdminStatusMeta):
+    """
+    YANG container handler.
+
+    YANG name: admin-status
+    """
+
+    _yang_name: Final[str] = 'admin-status'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'last-change': (
+            last_change := YANGLeafMember(
+                'last-change',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'status': (
+            status := YANGLeafMember(
+                'status',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AdminStatus':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py
new file mode 100644
index 000000000..78605ca6b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OperStatusMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: oper-status
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: oper-status
+        """
+
+        def __init__(self):
+            super().__init__(OperStatus)
+
+        def __get__(self, instance, owner=None) -> (
+                'OperStatusMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'OperStatus':
+            pass
+
+        def __enter__(self) -> 'OperStatus':
+            pass
+
+
+class OperStatus(
+        YANGContainer,
+        metaclass=OperStatusMeta):
+    """
+    YANG container handler.
+
+    YANG name: oper-status
+    """
+
+    _yang_name: Final[str] = 'oper-status'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'last-change': (
+            last_change := YANGLeafMember(
+                'last-change',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'status': (
+            status := YANGLeafMember(
+                'status',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'OperStatus':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py
new file mode 100644
index 000000000..dd38fd30e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeTopologyIdentifierMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-topology-identifier
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-topology-identifier
+        """
+
+        def __init__(self):
+            super().__init__(TeTopologyIdentifier)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeTopologyIdentifierMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeTopologyIdentifier':
+            pass
+
+        def __enter__(self) -> 'TeTopologyIdentifier':
+            pass
+
+
+class TeTopologyIdentifier(
+        YANGContainer,
+        metaclass=TeTopologyIdentifierMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-topology-identifier
+    """
+
+    _yang_name: Final[str] = 'te-topology-identifier'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'client-id': (
+            client_id := YANGLeafMember(
+                'client-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'topology-id': (
+            topology_id := YANGLeafMember(
+                'topology-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'provider-id': (
+            provider_id := YANGLeafMember(
+                'provider-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeTopologyIdentifier':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py
new file mode 100644
index 000000000..91ee6d356
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SloSleTemplatesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: slo-sle-templates
+    """
+    from .slo_sle_template import SloSleTemplate
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: slo-sle-templates
+        """
+
+        def __init__(self):
+            super().__init__(SloSleTemplates)
+
+        def __get__(self, instance, owner=None) -> (
+                'SloSleTemplatesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'SloSleTemplates':
+            pass
+
+        def __enter__(self) -> 'SloSleTemplates':
+            pass
+
+
+class SloSleTemplates(
+        YANGContainer,
+        metaclass=SloSleTemplatesMeta):
+    """
+    YANG container handler.
+
+    YANG name: slo-sle-templates
+    """
+
+    _yang_name: Final[str] = 'slo-sle-templates'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'slo-sle-template': (
+            slo_sle_template := (  # YANGListMember(
+                SloSleTemplatesMeta.
+                SloSleTemplate.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SloSleTemplates':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py
new file mode 100644
index 000000000..14040092d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py
@@ -0,0 +1,101 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SloSleTemplateMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: slo-sle-template
+    """
+    from .service_slo_sle_policy import ServiceSloSlePolicy
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: slo-sle-template
+        """
+
+        def __init__(self):
+            super().__init__(SloSleTemplate)
+
+        def __get__(self, instance, owner=None) -> (
+                'SloSleTemplateMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['SloSleTemplate']:
+            pass
+
+        def __iter__(self, key) -> Iterator['SloSleTemplate']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'SloSleTemplate':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'SloSleTemplateMeta.yang_list_descriptor'):
+            pass
+
+
+class SloSleTemplate(
+        YANGListItem,
+        metaclass=SloSleTemplateMeta):
+    """
+    YANG list item handler.
+
+    YANG name: slo-sle-template
+    """
+
+    _yang_name: Final[str] = 'slo-sle-template'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'id': (
+            id := YANGLeafMember(
+                'id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'template-ref': (
+            template_ref := YANGLeafMember(
+                'template-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'template-description': (
+            template_description := YANGLeafMember(
+                'template-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'service-slo-sle-policy': (
+            service_slo_sle_policy := (  # YANGContainerMember(
+                SloSleTemplateMeta.
+                ServiceSloSlePolicy.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SloSleTemplate':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py
new file mode 100644
index 000000000..fbd08fb0b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py
@@ -0,0 +1,103 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceSloSlePolicyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-slo-sle-policy
+    """
+    from .metric_bounds import MetricBounds
+    from .steering_constraints import SteeringConstraints
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-slo-sle-policy
+        """
+
+        def __init__(self):
+            super().__init__(ServiceSloSlePolicy)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceSloSlePolicyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceSloSlePolicy':
+            pass
+
+        def __enter__(self) -> 'ServiceSloSlePolicy':
+            pass
+
+
+class ServiceSloSlePolicy(
+        YANGContainer,
+        metaclass=ServiceSloSlePolicyMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-slo-sle-policy
+    """
+
+    _yang_name: Final[str] = 'service-slo-sle-policy'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'mtu': (
+            mtu := YANGLeafMember(
+                'mtu',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'max-occupancy-level': (
+            max_occupancy_level := YANGLeafMember(
+                'max-occupancy-level',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'isolation': (
+            isolation := YANGLeafMember(
+                'isolation',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'policy-description': (
+            policy_description := YANGLeafMember(
+                'policy-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'metric-bounds': (
+            metric_bounds := (  # YANGContainerMember(
+                ServiceSloSlePolicyMeta.
+                MetricBounds.
+                yang_container_descriptor())),
+
+        'steering-constraints': (
+            steering_constraints := (  # YANGContainerMember(
+                ServiceSloSlePolicyMeta.
+                SteeringConstraints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceSloSlePolicy':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py
new file mode 100644
index 000000000..a85354d58
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric-bounds
+    """
+    from .metric_bound import MetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(MetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MetricBounds':
+            pass
+
+        def __enter__(self) -> 'MetricBounds':
+            pass
+
+
+class MetricBounds(
+        YANGContainer,
+        metaclass=MetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric-bounds
+    """
+
+    _yang_name: Final[str] = 'metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'metric-bound': (
+            metric_bound := (  # YANGListMember(
+                MetricBoundsMeta.
+                MetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
new file mode 100644
index 000000000..c9d280dbe
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
@@ -0,0 +1,100 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(MetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['MetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['MetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'MetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'MetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class MetricBound(
+        YANGListItem,
+        metaclass=MetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: metric-bound
+    """
+
+    _yang_name: Final[str] = 'metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-unit': (
+            metric_unit := YANGLeafMember(
+                'metric-unit',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'value-description': (
+            value_description := YANGLeafMember(
+                'value-description',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+
+        'bound': (
+            bound := YANGLeafMember(
+                'bound',
+                'urn:ietf:params:xml:ns:yang:ietf-network-slice-service',
+                'ietf-network-slice-service')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py
new file mode 100644
index 000000000..9678efc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SteeringConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: steering-constraints
+    """
+    from .service_function import ServiceFunction
+    from .path_constraints import PathConstraints
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: steering-constraints
+        """
+
+        def __init__(self):
+            super().__init__(SteeringConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'SteeringConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'SteeringConstraints':
+            pass
+
+        def __enter__(self) -> 'SteeringConstraints':
+            pass
+
+
+class SteeringConstraints(
+        YANGContainer,
+        metaclass=SteeringConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: steering-constraints
+    """
+
+    _yang_name: Final[str] = 'steering-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'service-function': (
+            service_function := (  # YANGContainerMember(
+                SteeringConstraintsMeta.
+                ServiceFunction.
+                yang_container_descriptor())),
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                SteeringConstraintsMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SteeringConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
new file mode 100644
index 000000000..a7b789063
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py
new file mode 100644
index 000000000..1b288e162
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ServiceFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: service-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: service-function
+        """
+
+        def __init__(self):
+            super().__init__(ServiceFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ServiceFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ServiceFunction':
+            pass
+
+        def __enter__(self) -> 'ServiceFunction':
+            pass
+
+
+class ServiceFunction(
+        YANGContainer,
+        metaclass=ServiceFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: service-function
+    """
+
+    _yang_name: Final[str] = 'service-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-slice-service'
+    _yang_module_name: Final[str] = 'ietf-network-slice-service'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ServiceFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/__init__.py
new file mode 100644
index 000000000..e16748839
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NetworksMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: networks
+    """
+    from .te import Te
+    from .network import Network
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: networks
+        """
+
+        def __init__(self):
+            super().__init__(Networks)
+
+        def __get__(self, instance, owner=None) -> (
+                'NetworksMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Networks':
+            pass
+
+        def __enter__(self) -> 'Networks':
+            pass
+
+
+class Networks(
+        YANGContainer,
+        metaclass=NetworksMeta):
+    """
+    YANG container handler.
+
+    YANG name: networks
+    """
+
+    _yang_name: Final[str] = 'networks'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network'
+    _yang_module_name: Final[str] = 'ietf-network'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te': (
+            te := (  # YANGContainerMember(
+                NetworksMeta.
+                Te.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'network': (
+            network := (  # YANGListMember(
+                NetworksMeta.
+                Network.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Networks':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/__init__.py
new file mode 100644
index 000000000..7fe387732
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/__init__.py
@@ -0,0 +1,124 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NetworkMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: network
+    """
+    from .te import Te
+    from .te_topology_identifier import TeTopologyIdentifier
+    from .network_types import NetworkTypes
+    from .node import Node
+    from .supporting_network import SupportingNetwork
+    from .link import Link
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: network
+        """
+
+        def __init__(self):
+            super().__init__(Network)
+
+        def __get__(self, instance, owner=None) -> (
+                'NetworkMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Network']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Network']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Network':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'NetworkMeta.yang_list_descriptor'):
+            pass
+
+
+class Network(
+        YANGListItem,
+        metaclass=NetworkMeta):
+    """
+    YANG list item handler.
+
+    YANG name: network
+    """
+
+    _yang_name: Final[str] = 'network'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network'
+    _yang_module_name: Final[str] = 'ietf-network'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'network-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-id': (
+            network_id := YANGLeafMember(
+                'network-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network',
+                'ietf-network')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te': (
+            te := (  # YANGContainerMember(
+                NetworkMeta.
+                Te.
+                yang_container_descriptor())),
+
+        'te-topology-identifier': (
+            te_topology_identifier := (  # YANGContainerMember(
+                NetworkMeta.
+                TeTopologyIdentifier.
+                yang_container_descriptor())),
+
+        'network-types': (
+            network_types := (  # YANGContainerMember(
+                NetworkMeta.
+                NetworkTypes.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'node': (
+            node := (  # YANGListMember(
+                NetworkMeta.
+                Node.
+                yang_list_descriptor())),
+
+        'supporting-network': (
+            supporting_network := (  # YANGListMember(
+                NetworkMeta.
+                SupportingNetwork.
+                yang_list_descriptor())),
+
+        'link': (
+            link := (  # YANGListMember(
+                NetworkMeta.
+                Link.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Network':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/__init__.py
new file mode 100644
index 000000000..2ee04ebbf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/__init__.py
@@ -0,0 +1,110 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LinkMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: link
+    """
+    from .source import Source
+    from .destination import Destination
+    from .te import Te
+    from .supporting_link import SupportingLink
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: link
+        """
+
+        def __init__(self):
+            super().__init__(Link)
+
+        def __get__(self, instance, owner=None) -> (
+                'LinkMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Link']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Link']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Link':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LinkMeta.yang_list_descriptor'):
+            pass
+
+
+class Link(
+        YANGListItem,
+        metaclass=LinkMeta):
+    """
+    YANG list item handler.
+
+    YANG name: link
+    """
+
+    _yang_name: Final[str] = 'link'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-topology'
+    _yang_module_name: Final[str] = 'ietf-network-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'link-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-id': (
+            link_id := YANGLeafMember(
+                'link-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'source': (
+            source := (  # YANGContainerMember(
+                LinkMeta.
+                Source.
+                yang_container_descriptor())),
+
+        'destination': (
+            destination := (  # YANGContainerMember(
+                LinkMeta.
+                Destination.
+                yang_container_descriptor())),
+
+        'te': (
+            te := (  # YANGContainerMember(
+                LinkMeta.
+                Te.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'supporting-link': (
+            supporting_link := (  # YANGListMember(
+                LinkMeta.
+                SupportingLink.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Link':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/destination/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/destination/__init__.py
new file mode 100644
index 000000000..ab2104894
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/destination/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class DestinationMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: destination
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: destination
+        """
+
+        def __init__(self):
+            super().__init__(Destination)
+
+        def __get__(self, instance, owner=None) -> (
+                'DestinationMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Destination':
+            pass
+
+        def __enter__(self) -> 'Destination':
+            pass
+
+
+class Destination(
+        YANGContainer,
+        metaclass=DestinationMeta):
+    """
+    YANG container handler.
+
+    YANG name: destination
+    """
+
+    _yang_name: Final[str] = 'destination'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-topology'
+    _yang_module_name: Final[str] = 'ietf-network-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'dest-node': (
+            dest_node := YANGLeafMember(
+                'dest-node',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+
+        'dest-tp': (
+            dest_tp := YANGLeafMember(
+                'dest-tp',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Destination':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/source/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/source/__init__.py
new file mode 100644
index 000000000..5c1f21e7e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/source/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SourceMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: source
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: source
+        """
+
+        def __init__(self):
+            super().__init__(Source)
+
+        def __get__(self, instance, owner=None) -> (
+                'SourceMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Source':
+            pass
+
+        def __enter__(self) -> 'Source':
+            pass
+
+
+class Source(
+        YANGContainer,
+        metaclass=SourceMeta):
+    """
+    YANG container handler.
+
+    YANG name: source
+    """
+
+    _yang_name: Final[str] = 'source'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-topology'
+    _yang_module_name: Final[str] = 'ietf-network-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'source-tp': (
+            source_tp := YANGLeafMember(
+                'source-tp',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+
+        'source-node': (
+            source_node := YANGLeafMember(
+                'source-node',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Source':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py
new file mode 100644
index 000000000..a5802615c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SupportingLinkMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: supporting-link
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: supporting-link
+        """
+
+        def __init__(self):
+            super().__init__(SupportingLink)
+
+        def __get__(self, instance, owner=None) -> (
+                'SupportingLinkMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['SupportingLink']:
+            pass
+
+        def __iter__(self, key) -> Iterator['SupportingLink']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'SupportingLink':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'SupportingLinkMeta.yang_list_descriptor'):
+            pass
+
+
+class SupportingLink(
+        YANGListItem,
+        metaclass=SupportingLinkMeta):
+    """
+    YANG list item handler.
+
+    YANG name: supporting-link
+    """
+
+    _yang_name: Final[str] = 'supporting-link'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-topology'
+    _yang_module_name: Final[str] = 'ietf-network-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'network-ref',
+        'link-ref',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-ref': (
+            link_ref := YANGLeafMember(
+                'link-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SupportingLink':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/__init__.py
new file mode 100644
index 000000000..3e29b70cb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/__init__.py
@@ -0,0 +1,141 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te
+    """
+    from .statistics import Statistics
+    from .te_link_attributes import TeLinkAttributes
+    from .underlay import Underlay
+    from .recovery import Recovery
+    from .information_source_state import InformationSourceState
+    from .information_source_entry import InformationSourceEntry
+    from .bundle_stack_level import BundleStackLevel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te
+        """
+
+        def __init__(self):
+            super().__init__(Te)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Te':
+            pass
+
+        def __enter__(self) -> 'Te':
+            pass
+
+
+class Te(
+        YANGContainer,
+        metaclass=TeMeta):
+    """
+    YANG container handler.
+
+    YANG name: te
+    """
+
+    _yang_name: Final[str] = 'te'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'is-transitional': (
+            is_transitional := YANGLeafMember(
+                'is-transitional',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'information-source-instance': (
+            information_source_instance := YANGLeafMember(
+                'information-source-instance',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'oper-status': (
+            oper_status := YANGLeafMember(
+                'oper-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'information-source': (
+            information_source := YANGLeafMember(
+                'information-source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'statistics': (
+            statistics := (  # YANGContainerMember(
+                TeMeta.
+                Statistics.
+                yang_container_descriptor())),
+
+        'te-link-attributes': (
+            te_link_attributes := (  # YANGContainerMember(
+                TeMeta.
+                TeLinkAttributes.
+                yang_container_descriptor())),
+
+        'underlay': (
+            underlay := (  # YANGContainerMember(
+                TeMeta.
+                Underlay.
+                yang_container_descriptor())),
+
+        'recovery': (
+            recovery := (  # YANGContainerMember(
+                TeMeta.
+                Recovery.
+                yang_container_descriptor())),
+
+        'information-source-state': (
+            information_source_state := (  # YANGContainerMember(
+                TeMeta.
+                InformationSourceState.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'information-source-entry': (
+            information_source_entry := (  # YANGListMember(
+                TeMeta.
+                InformationSourceEntry.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Te':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'bundle-stack-level':
+                TeMeta.BundleStackLevel(
+                    instance),
+        }
+        return instance
+
+    @property
+    def bundle_stack_level(self) -> (
+            TeMeta.BundleStackLevel):
+        return self._yang_choices['bundle-stack-level']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py
new file mode 100644
index 000000000..96d619746
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BundleStackLevelMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: bundle-stack-level
+    """
+
+    from .component import Component
+    from .bundle import Bundle
+
+    class component_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: component
+        """
+
+        def __init__(self):
+            super().__init__(
+                BundleStackLevelMeta.Component)
+
+        def __get__(self, instance, owner=None) -> (
+                'BundleStackLevelMeta.component_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'BundleStackLevelMeta.Component'):
+            pass
+
+        def __enter__(self) -> (
+                'BundleStackLevelMeta.Component'):
+            pass
+
+    class bundle_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: bundle
+        """
+
+        def __init__(self):
+            super().__init__(
+                BundleStackLevelMeta.Bundle)
+
+        def __get__(self, instance, owner=None) -> (
+                'BundleStackLevelMeta.bundle_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'BundleStackLevelMeta.Bundle'):
+            pass
+
+        def __enter__(self) -> (
+                'BundleStackLevelMeta.Bundle'):
+            pass
+
+
+class BundleStackLevel(YANGChoice, metaclass=BundleStackLevelMeta):
+    """
+    YANG choice handler.
+
+    YANG name: bundle-stack-level
+    """
+
+    _yang_name: Final[str] = 'bundle-stack-level'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'component': (
+            component := (  # YANGChoiceCase(
+                BundleStackLevelMeta.
+                component_case_descriptor())),
+
+        'bundle': (
+            bundle := (  # YANGChoiceCase(
+                BundleStackLevelMeta.
+                bundle_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py
new file mode 100644
index 000000000..36e0165ad
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BundleMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: bundle
+    """
+    from .bundled_links import BundledLinks
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: bundle
+        """
+
+        def __init__(self):
+            super().__init__(Bundle)
+
+        def __get__(self, instance, owner=None) -> (
+                'BundleMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Bundle':
+            pass
+
+        def __enter__(self) -> 'Bundle':
+            pass
+
+
+class Bundle(
+        YANGContainer,
+        metaclass=BundleMeta):
+    """
+    YANG container handler.
+
+    YANG name: bundle
+    """
+
+    _yang_name: Final[str] = 'bundle'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'bundled-links': (
+            bundled_links := (  # YANGContainerMember(
+                BundleMeta.
+                BundledLinks.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Bundle':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py
new file mode 100644
index 000000000..861168922
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BundledLinksMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: bundled-links
+    """
+    from .bundled_link import BundledLink
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: bundled-links
+        """
+
+        def __init__(self):
+            super().__init__(BundledLinks)
+
+        def __get__(self, instance, owner=None) -> (
+                'BundledLinksMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'BundledLinks':
+            pass
+
+        def __enter__(self) -> 'BundledLinks':
+            pass
+
+
+class BundledLinks(
+        YANGContainer,
+        metaclass=BundledLinksMeta):
+    """
+    YANG container handler.
+
+    YANG name: bundled-links
+    """
+
+    _yang_name: Final[str] = 'bundled-links'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'bundled-link': (
+            bundled_link := (  # YANGListMember(
+                BundledLinksMeta.
+                BundledLink.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'BundledLinks':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py
new file mode 100644
index 000000000..3a628e325
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py
@@ -0,0 +1,94 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BundledLinkMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: bundled-link
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: bundled-link
+        """
+
+        def __init__(self):
+            super().__init__(BundledLink)
+
+        def __get__(self, instance, owner=None) -> (
+                'BundledLinkMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['BundledLink']:
+            pass
+
+        def __iter__(self, key) -> Iterator['BundledLink']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'BundledLink':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'BundledLinkMeta.yang_list_descriptor'):
+            pass
+
+
+class BundledLink(
+        YANGListItem,
+        metaclass=BundledLinkMeta):
+    """
+    YANG list item handler.
+
+    YANG name: bundled-link
+    """
+
+    _yang_name: Final[str] = 'bundled-link'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'sequence',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sequence': (
+            sequence := YANGLeafMember(
+                'sequence',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'src-tp-ref': (
+            src_tp_ref := YANGLeafMember(
+                'src-tp-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'des-tp-ref': (
+            des_tp_ref := YANGLeafMember(
+                'des-tp-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'BundledLink':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py
new file mode 100644
index 000000000..de95dd7a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ComponentMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: component
+    """
+    from .component_links import ComponentLinks
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: component
+        """
+
+        def __init__(self):
+            super().__init__(Component)
+
+        def __get__(self, instance, owner=None) -> (
+                'ComponentMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Component':
+            pass
+
+        def __enter__(self) -> 'Component':
+            pass
+
+
+class Component(
+        YANGContainer,
+        metaclass=ComponentMeta):
+    """
+    YANG container handler.
+
+    YANG name: component
+    """
+
+    _yang_name: Final[str] = 'component'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'component-links': (
+            component_links := (  # YANGContainerMember(
+                ComponentMeta.
+                ComponentLinks.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Component':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py
new file mode 100644
index 000000000..ed1c0df5d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ComponentLinksMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: component-links
+    """
+    from .component_link import ComponentLink
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: component-links
+        """
+
+        def __init__(self):
+            super().__init__(ComponentLinks)
+
+        def __get__(self, instance, owner=None) -> (
+                'ComponentLinksMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ComponentLinks':
+            pass
+
+        def __enter__(self) -> 'ComponentLinks':
+            pass
+
+
+class ComponentLinks(
+        YANGContainer,
+        metaclass=ComponentLinksMeta):
+    """
+    YANG container handler.
+
+    YANG name: component-links
+    """
+
+    _yang_name: Final[str] = 'component-links'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'component-link': (
+            component_link := (  # YANGListMember(
+                ComponentLinksMeta.
+                ComponentLink.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ComponentLinks':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py
new file mode 100644
index 000000000..ef295d4c9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py
@@ -0,0 +1,94 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ComponentLinkMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: component-link
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: component-link
+        """
+
+        def __init__(self):
+            super().__init__(ComponentLink)
+
+        def __get__(self, instance, owner=None) -> (
+                'ComponentLinkMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['ComponentLink']:
+            pass
+
+        def __iter__(self, key) -> Iterator['ComponentLink']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'ComponentLink':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'ComponentLinkMeta.yang_list_descriptor'):
+            pass
+
+
+class ComponentLink(
+        YANGListItem,
+        metaclass=ComponentLinkMeta):
+    """
+    YANG list item handler.
+
+    YANG name: component-link
+    """
+
+    _yang_name: Final[str] = 'component-link'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'sequence',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'src-interface-ref': (
+            src_interface_ref := YANGLeafMember(
+                'src-interface-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'sequence': (
+            sequence := YANGLeafMember(
+                'sequence',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'des-interface-ref': (
+            des_interface_ref := YANGLeafMember(
+                'des-interface-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ComponentLink':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py
new file mode 100644
index 000000000..02474d202
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py
@@ -0,0 +1,181 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class InformationSourceEntryMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: information-source-entry
+    """
+    from .max_link_bandwidth import MaxLinkBandwidth
+    from .label_restrictions import LabelRestrictions
+    from .information_source_state import InformationSourceState
+    from .max_resv_link_bandwidth import MaxResvLinkBandwidth
+    from .te_srlgs import TeSrlgs
+    from .te_nsrlgs import TeNsrlgs
+    from .interface_switching_capability import InterfaceSwitchingCapability
+    from .unreserved_bandwidth import UnreservedBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: information-source-entry
+        """
+
+        def __init__(self):
+            super().__init__(InformationSourceEntry)
+
+        def __get__(self, instance, owner=None) -> (
+                'InformationSourceEntryMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['InformationSourceEntry']:
+            pass
+
+        def __iter__(self, key) -> Iterator['InformationSourceEntry']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'InformationSourceEntry':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'InformationSourceEntryMeta.yang_list_descriptor'):
+            pass
+
+
+class InformationSourceEntry(
+        YANGListItem,
+        metaclass=InformationSourceEntryMeta):
+    """
+    YANG list item handler.
+
+    YANG name: information-source-entry
+    """
+
+    _yang_name: Final[str] = 'information-source-entry'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'information-source',
+        'information-source-instance',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'information-source-instance': (
+            information_source_instance := YANGLeafMember(
+                'information-source-instance',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'te-igp-metric': (
+            te_igp_metric := YANGLeafMember(
+                'te-igp-metric',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'te-default-metric': (
+            te_default_metric := YANGLeafMember(
+                'te-default-metric',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'te-delay-metric': (
+            te_delay_metric := YANGLeafMember(
+                'te-delay-metric',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-index': (
+            link_index := YANGLeafMember(
+                'link-index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-protection-type': (
+            link_protection_type := YANGLeafMember(
+                'link-protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'administrative-group': (
+            administrative_group := YANGLeafMember(
+                'administrative-group',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'information-source': (
+            information_source := YANGLeafMember(
+                'information-source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'max-link-bandwidth': (
+            max_link_bandwidth := (  # YANGContainerMember(
+                InformationSourceEntryMeta.
+                MaxLinkBandwidth.
+                yang_container_descriptor())),
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                InformationSourceEntryMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+
+        'information-source-state': (
+            information_source_state := (  # YANGContainerMember(
+                InformationSourceEntryMeta.
+                InformationSourceState.
+                yang_container_descriptor())),
+
+        'max-resv-link-bandwidth': (
+            max_resv_link_bandwidth := (  # YANGContainerMember(
+                InformationSourceEntryMeta.
+                MaxResvLinkBandwidth.
+                yang_container_descriptor())),
+
+        'te-srlgs': (
+            te_srlgs := (  # YANGContainerMember(
+                InformationSourceEntryMeta.
+                TeSrlgs.
+                yang_container_descriptor())),
+
+        'te-nsrlgs': (
+            te_nsrlgs := (  # YANGContainerMember(
+                InformationSourceEntryMeta.
+                TeNsrlgs.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'interface-switching-capability': (
+            interface_switching_capability := (  # YANGListMember(
+                InformationSourceEntryMeta.
+                InterfaceSwitchingCapability.
+                yang_list_descriptor())),
+
+        'unreserved-bandwidth': (
+            unreserved_bandwidth := (  # YANGListMember(
+                InformationSourceEntryMeta.
+                UnreservedBandwidth.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'InformationSourceEntry':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py
new file mode 100644
index 000000000..4c7d1b7e1
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py
@@ -0,0 +1,90 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class InformationSourceStateMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: information-source-state
+    """
+    from .topology import Topology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: information-source-state
+        """
+
+        def __init__(self):
+            super().__init__(InformationSourceState)
+
+        def __get__(self, instance, owner=None) -> (
+                'InformationSourceStateMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'InformationSourceState':
+            pass
+
+        def __enter__(self) -> 'InformationSourceState':
+            pass
+
+
+class InformationSourceState(
+        YANGContainer,
+        metaclass=InformationSourceStateMeta):
+    """
+    YANG container handler.
+
+    YANG name: information-source-state
+    """
+
+    _yang_name: Final[str] = 'information-source-state'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-instance': (
+            network_instance := YANGLeafMember(
+                'network-instance',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'credibility-preference': (
+            credibility_preference := YANGLeafMember(
+                'credibility-preference',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'logical-network-element': (
+            logical_network_element := YANGLeafMember(
+                'logical-network-element',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'topology': (
+            topology := (  # YANGContainerMember(
+                InformationSourceStateMeta.
+                Topology.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'InformationSourceState':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py
new file mode 100644
index 000000000..f855ca6c7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TopologyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: topology
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: topology
+        """
+
+        def __init__(self):
+            super().__init__(Topology)
+
+        def __get__(self, instance, owner=None) -> (
+                'TopologyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Topology':
+            pass
+
+        def __enter__(self) -> 'Topology':
+            pass
+
+
+class Topology(
+        YANGContainer,
+        metaclass=TopologyMeta):
+    """
+    YANG container handler.
+
+    YANG name: topology
+    """
+
+    _yang_name: Final[str] = 'topology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-ref': (
+            link_ref := YANGLeafMember(
+                'link-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Topology':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py
new file mode 100644
index 000000000..ae78596b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py
@@ -0,0 +1,96 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class InterfaceSwitchingCapabilityMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: interface-switching-capability
+    """
+    from .max_lsp_bandwidth import MaxLspBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: interface-switching-capability
+        """
+
+        def __init__(self):
+            super().__init__(InterfaceSwitchingCapability)
+
+        def __get__(self, instance, owner=None) -> (
+                'InterfaceSwitchingCapabilityMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['InterfaceSwitchingCapability']:
+            pass
+
+        def __iter__(self, key) -> Iterator['InterfaceSwitchingCapability']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'InterfaceSwitchingCapability':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'InterfaceSwitchingCapabilityMeta.yang_list_descriptor'):
+            pass
+
+
+class InterfaceSwitchingCapability(
+        YANGListItem,
+        metaclass=InterfaceSwitchingCapabilityMeta):
+    """
+    YANG list item handler.
+
+    YANG name: interface-switching-capability
+    """
+
+    _yang_name: Final[str] = 'interface-switching-capability'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'switching-capability',
+        'encoding',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'switching-capability': (
+            switching_capability := YANGLeafMember(
+                'switching-capability',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'encoding': (
+            encoding := YANGLeafMember(
+                'encoding',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'max-lsp-bandwidth': (
+            max_lsp_bandwidth := (  # YANGListMember(
+                InterfaceSwitchingCapabilityMeta.
+                MaxLspBandwidth.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'InterfaceSwitchingCapability':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py
new file mode 100644
index 000000000..f4798990c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MaxLspBandwidthMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: max-lsp-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: max-lsp-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(MaxLspBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'MaxLspBandwidthMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['MaxLspBandwidth']:
+            pass
+
+        def __iter__(self, key) -> Iterator['MaxLspBandwidth']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'MaxLspBandwidth':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'MaxLspBandwidthMeta.yang_list_descriptor'):
+            pass
+
+
+class MaxLspBandwidth(
+        YANGListItem,
+        metaclass=MaxLspBandwidthMeta):
+    """
+    YANG list item handler.
+
+    YANG name: max-lsp-bandwidth
+    """
+
+    _yang_name: Final[str] = 'max-lsp-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'priority',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'priority': (
+            priority := YANGLeafMember(
+                'priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                MaxLspBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MaxLspBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..eb255b295
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_step import LabelStep
+    from .label_end import LabelEnd
+    from .label_start import LabelStart
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py
new file mode 100644
index 000000000..c867501c5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MaxLinkBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: max-link-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: max-link-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(MaxLinkBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'MaxLinkBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MaxLinkBandwidth':
+            pass
+
+        def __enter__(self) -> 'MaxLinkBandwidth':
+            pass
+
+
+class MaxLinkBandwidth(
+        YANGContainer,
+        metaclass=MaxLinkBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: max-link-bandwidth
+    """
+
+    _yang_name: Final[str] = 'max-link-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                MaxLinkBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MaxLinkBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py
new file mode 100644
index 000000000..7105d2e36
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MaxResvLinkBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: max-resv-link-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: max-resv-link-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(MaxResvLinkBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'MaxResvLinkBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MaxResvLinkBandwidth':
+            pass
+
+        def __enter__(self) -> 'MaxResvLinkBandwidth':
+            pass
+
+
+class MaxResvLinkBandwidth(
+        YANGContainer,
+        metaclass=MaxResvLinkBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: max-resv-link-bandwidth
+    """
+
+    _yang_name: Final[str] = 'max-resv-link-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                MaxResvLinkBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MaxResvLinkBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py
new file mode 100644
index 000000000..82759cb75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeNsrlgsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-nsrlgs
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-nsrlgs
+        """
+
+        def __init__(self):
+            super().__init__(TeNsrlgs)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeNsrlgsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeNsrlgs':
+            pass
+
+        def __enter__(self) -> 'TeNsrlgs':
+            pass
+
+
+class TeNsrlgs(
+        YANGContainer,
+        metaclass=TeNsrlgsMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-nsrlgs
+    """
+
+    _yang_name: Final[str] = 'te-nsrlgs'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeNsrlgs':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py
new file mode 100644
index 000000000..f4b20e2b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeSrlgsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-srlgs
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-srlgs
+        """
+
+        def __init__(self):
+            super().__init__(TeSrlgs)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeSrlgsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeSrlgs':
+            pass
+
+        def __enter__(self) -> 'TeSrlgs':
+            pass
+
+
+class TeSrlgs(
+        YANGContainer,
+        metaclass=TeSrlgsMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-srlgs
+    """
+
+    _yang_name: Final[str] = 'te-srlgs'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeSrlgs':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py
new file mode 100644
index 000000000..1a56afee4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnreservedBandwidthMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: unreserved-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: unreserved-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(UnreservedBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnreservedBandwidthMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['UnreservedBandwidth']:
+            pass
+
+        def __iter__(self, key) -> Iterator['UnreservedBandwidth']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'UnreservedBandwidth':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'UnreservedBandwidthMeta.yang_list_descriptor'):
+            pass
+
+
+class UnreservedBandwidth(
+        YANGListItem,
+        metaclass=UnreservedBandwidthMeta):
+    """
+    YANG list item handler.
+
+    YANG name: unreserved-bandwidth
+    """
+
+    _yang_name: Final[str] = 'unreserved-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'priority',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'priority': (
+            priority := YANGLeafMember(
+                'priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                UnreservedBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnreservedBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py
new file mode 100644
index 000000000..ed0ddce51
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py
@@ -0,0 +1,90 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class InformationSourceStateMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: information-source-state
+    """
+    from .topology import Topology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: information-source-state
+        """
+
+        def __init__(self):
+            super().__init__(InformationSourceState)
+
+        def __get__(self, instance, owner=None) -> (
+                'InformationSourceStateMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'InformationSourceState':
+            pass
+
+        def __enter__(self) -> 'InformationSourceState':
+            pass
+
+
+class InformationSourceState(
+        YANGContainer,
+        metaclass=InformationSourceStateMeta):
+    """
+    YANG container handler.
+
+    YANG name: information-source-state
+    """
+
+    _yang_name: Final[str] = 'information-source-state'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'credibility-preference': (
+            credibility_preference := YANGLeafMember(
+                'credibility-preference',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'network-instance': (
+            network_instance := YANGLeafMember(
+                'network-instance',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'logical-network-element': (
+            logical_network_element := YANGLeafMember(
+                'logical-network-element',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'topology': (
+            topology := (  # YANGContainerMember(
+                InformationSourceStateMeta.
+                Topology.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'InformationSourceState':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py
new file mode 100644
index 000000000..f855ca6c7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TopologyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: topology
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: topology
+        """
+
+        def __init__(self):
+            super().__init__(Topology)
+
+        def __get__(self, instance, owner=None) -> (
+                'TopologyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Topology':
+            pass
+
+        def __enter__(self) -> 'Topology':
+            pass
+
+
+class Topology(
+        YANGContainer,
+        metaclass=TopologyMeta):
+    """
+    YANG container handler.
+
+    YANG name: topology
+    """
+
+    _yang_name: Final[str] = 'topology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-ref': (
+            link_ref := YANGLeafMember(
+                'link-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Topology':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py
new file mode 100644
index 000000000..8a8ed9893
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RecoveryMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: recovery
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: recovery
+        """
+
+        def __init__(self):
+            super().__init__(Recovery)
+
+        def __get__(self, instance, owner=None) -> (
+                'RecoveryMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Recovery':
+            pass
+
+        def __enter__(self) -> 'Recovery':
+            pass
+
+
+class Recovery(
+        YANGContainer,
+        metaclass=RecoveryMeta):
+    """
+    YANG container handler.
+
+    YANG name: recovery
+    """
+
+    _yang_name: Final[str] = 'recovery'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'restoration-status': (
+            restoration_status := YANGLeafMember(
+                'restoration-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'protection-status': (
+            protection_status := YANGLeafMember(
+                'protection-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Recovery':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py
new file mode 100644
index 000000000..35985894c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py
@@ -0,0 +1,173 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class StatisticsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: statistics
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: statistics
+        """
+
+        def __init__(self):
+            super().__init__(Statistics)
+
+        def __get__(self, instance, owner=None) -> (
+                'StatisticsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Statistics':
+            pass
+
+        def __enter__(self) -> 'Statistics':
+            pass
+
+
+class Statistics(
+        YANGContainer,
+        metaclass=StatisticsMeta):
+    """
+    YANG container handler.
+
+    YANG name: statistics
+    """
+
+    _yang_name: Final[str] = 'statistics'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'enables': (
+            enables := YANGLeafMember(
+                'enables',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'modifies': (
+            modifies := YANGLeafMember(
+                'modifies',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'fault-detects': (
+            fault_detects := YANGLeafMember(
+                'fault-detects',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restoration-failures': (
+            restoration_failures := YANGLeafMember(
+                'restoration-failures',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'protection-switches': (
+            protection_switches := YANGLeafMember(
+                'protection-switches',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'downs': (
+            downs := YANGLeafMember(
+                'downs',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restoration-successes': (
+            restoration_successes := YANGLeafMember(
+                'restoration-successes',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restoration-reversion-starts': (
+            restoration_reversion_starts := YANGLeafMember(
+                'restoration-reversion-starts',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'maintenance-clears': (
+            maintenance_clears := YANGLeafMember(
+                'maintenance-clears',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'protection-reverts': (
+            protection_reverts := YANGLeafMember(
+                'protection-reverts',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restoration-reversion-successes': (
+            restoration_reversion_successes := YANGLeafMember(
+                'restoration-reversion-successes',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'ups': (
+            ups := YANGLeafMember(
+                'ups',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restoration-starts': (
+            restoration_starts := YANGLeafMember(
+                'restoration-starts',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'discontinuity-time': (
+            discontinuity_time := YANGLeafMember(
+                'discontinuity-time',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disables': (
+            disables := YANGLeafMember(
+                'disables',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'fault-clears': (
+            fault_clears := YANGLeafMember(
+                'fault-clears',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'maintenance-sets': (
+            maintenance_sets := YANGLeafMember(
+                'maintenance-sets',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restoration-reversion-failures': (
+            restoration_reversion_failures := YANGLeafMember(
+                'restoration-reversion-failures',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Statistics':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py
new file mode 100644
index 000000000..c176b4065
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py
@@ -0,0 +1,188 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLinkAttributesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-link-attributes
+    """
+    from .max_resv_link_bandwidth import MaxResvLinkBandwidth
+    from .max_link_bandwidth import MaxLinkBandwidth
+    from .underlay import Underlay
+    from .te_srlgs import TeSrlgs
+    from .label_restrictions import LabelRestrictions
+    from .external_domain import ExternalDomain
+    from .te_nsrlgs import TeNsrlgs
+    from .unreserved_bandwidth import UnreservedBandwidth
+    from .interface_switching_capability import InterfaceSwitchingCapability
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-link-attributes
+        """
+
+        def __init__(self):
+            super().__init__(TeLinkAttributes)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLinkAttributesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLinkAttributes':
+            pass
+
+        def __enter__(self) -> 'TeLinkAttributes':
+            pass
+
+
+class TeLinkAttributes(
+        YANGContainer,
+        metaclass=TeLinkAttributesMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-link-attributes
+    """
+
+    _yang_name: Final[str] = 'te-link-attributes'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'is-abstract': (
+            is_abstract := YANGLeafMember(
+                'is-abstract',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-index': (
+            link_index := YANGLeafMember(
+                'link-index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'te-default-metric': (
+            te_default_metric := YANGLeafMember(
+                'te-default-metric',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-protection-type': (
+            link_protection_type := YANGLeafMember(
+                'link-protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'admin-status': (
+            admin_status := YANGLeafMember(
+                'admin-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'te-igp-metric': (
+            te_igp_metric := YANGLeafMember(
+                'te-igp-metric',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'access-type': (
+            access_type := YANGLeafMember(
+                'access-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'te-delay-metric': (
+            te_delay_metric := YANGLeafMember(
+                'te-delay-metric',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'administrative-group': (
+            administrative_group := YANGLeafMember(
+                'administrative-group',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'max-resv-link-bandwidth': (
+            max_resv_link_bandwidth := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                MaxResvLinkBandwidth.
+                yang_container_descriptor())),
+
+        'max-link-bandwidth': (
+            max_link_bandwidth := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                MaxLinkBandwidth.
+                yang_container_descriptor())),
+
+        'underlay': (
+            underlay := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                Underlay.
+                yang_container_descriptor())),
+
+        'te-srlgs': (
+            te_srlgs := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                TeSrlgs.
+                yang_container_descriptor())),
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+
+        'external-domain': (
+            external_domain := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                ExternalDomain.
+                yang_container_descriptor())),
+
+        'te-nsrlgs': (
+            te_nsrlgs := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                TeNsrlgs.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'unreserved-bandwidth': (
+            unreserved_bandwidth := (  # YANGListMember(
+                TeLinkAttributesMeta.
+                UnreservedBandwidth.
+                yang_list_descriptor())),
+
+        'interface-switching-capability': (
+            interface_switching_capability := (  # YANGListMember(
+                TeLinkAttributesMeta.
+                InterfaceSwitchingCapability.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLinkAttributes':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py
new file mode 100644
index 000000000..cb20a2055
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExternalDomainMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: external-domain
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: external-domain
+        """
+
+        def __init__(self):
+            super().__init__(ExternalDomain)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExternalDomainMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExternalDomain':
+            pass
+
+        def __enter__(self) -> 'ExternalDomain':
+            pass
+
+
+class ExternalDomain(
+        YANGContainer,
+        metaclass=ExternalDomainMeta):
+    """
+    YANG container handler.
+
+    YANG name: external-domain
+    """
+
+    _yang_name: Final[str] = 'external-domain'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'remote-te-node-id': (
+            remote_te_node_id := YANGLeafMember(
+                'remote-te-node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'remote-te-link-tp-id': (
+            remote_te_link_tp_id := YANGLeafMember(
+                'remote-te-link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExternalDomain':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py
new file mode 100644
index 000000000..ae78596b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py
@@ -0,0 +1,96 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class InterfaceSwitchingCapabilityMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: interface-switching-capability
+    """
+    from .max_lsp_bandwidth import MaxLspBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: interface-switching-capability
+        """
+
+        def __init__(self):
+            super().__init__(InterfaceSwitchingCapability)
+
+        def __get__(self, instance, owner=None) -> (
+                'InterfaceSwitchingCapabilityMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['InterfaceSwitchingCapability']:
+            pass
+
+        def __iter__(self, key) -> Iterator['InterfaceSwitchingCapability']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'InterfaceSwitchingCapability':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'InterfaceSwitchingCapabilityMeta.yang_list_descriptor'):
+            pass
+
+
+class InterfaceSwitchingCapability(
+        YANGListItem,
+        metaclass=InterfaceSwitchingCapabilityMeta):
+    """
+    YANG list item handler.
+
+    YANG name: interface-switching-capability
+    """
+
+    _yang_name: Final[str] = 'interface-switching-capability'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'switching-capability',
+        'encoding',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'switching-capability': (
+            switching_capability := YANGLeafMember(
+                'switching-capability',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'encoding': (
+            encoding := YANGLeafMember(
+                'encoding',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'max-lsp-bandwidth': (
+            max_lsp_bandwidth := (  # YANGListMember(
+                InterfaceSwitchingCapabilityMeta.
+                MaxLspBandwidth.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'InterfaceSwitchingCapability':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
new file mode 100644
index 000000000..f4798990c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MaxLspBandwidthMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: max-lsp-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: max-lsp-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(MaxLspBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'MaxLspBandwidthMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['MaxLspBandwidth']:
+            pass
+
+        def __iter__(self, key) -> Iterator['MaxLspBandwidth']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'MaxLspBandwidth':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'MaxLspBandwidthMeta.yang_list_descriptor'):
+            pass
+
+
+class MaxLspBandwidth(
+        YANGListItem,
+        metaclass=MaxLspBandwidthMeta):
+    """
+    YANG list item handler.
+
+    YANG name: max-lsp-bandwidth
+    """
+
+    _yang_name: Final[str] = 'max-lsp-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'priority',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'priority': (
+            priority := YANGLeafMember(
+                'priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                MaxLspBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MaxLspBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..f2c5781e4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_start import LabelStart
+    from .label_step import LabelStep
+    from .label_end import LabelEnd
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py
new file mode 100644
index 000000000..c867501c5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MaxLinkBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: max-link-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: max-link-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(MaxLinkBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'MaxLinkBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MaxLinkBandwidth':
+            pass
+
+        def __enter__(self) -> 'MaxLinkBandwidth':
+            pass
+
+
+class MaxLinkBandwidth(
+        YANGContainer,
+        metaclass=MaxLinkBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: max-link-bandwidth
+    """
+
+    _yang_name: Final[str] = 'max-link-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                MaxLinkBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MaxLinkBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py
new file mode 100644
index 000000000..7105d2e36
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MaxResvLinkBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: max-resv-link-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: max-resv-link-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(MaxResvLinkBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'MaxResvLinkBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MaxResvLinkBandwidth':
+            pass
+
+        def __enter__(self) -> 'MaxResvLinkBandwidth':
+            pass
+
+
+class MaxResvLinkBandwidth(
+        YANGContainer,
+        metaclass=MaxResvLinkBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: max-resv-link-bandwidth
+    """
+
+    _yang_name: Final[str] = 'max-resv-link-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                MaxResvLinkBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MaxResvLinkBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py
new file mode 100644
index 000000000..82759cb75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeNsrlgsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-nsrlgs
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-nsrlgs
+        """
+
+        def __init__(self):
+            super().__init__(TeNsrlgs)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeNsrlgsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeNsrlgs':
+            pass
+
+        def __enter__(self) -> 'TeNsrlgs':
+            pass
+
+
+class TeNsrlgs(
+        YANGContainer,
+        metaclass=TeNsrlgsMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-nsrlgs
+    """
+
+    _yang_name: Final[str] = 'te-nsrlgs'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeNsrlgs':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py
new file mode 100644
index 000000000..f4b20e2b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeSrlgsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-srlgs
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-srlgs
+        """
+
+        def __init__(self):
+            super().__init__(TeSrlgs)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeSrlgsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeSrlgs':
+            pass
+
+        def __enter__(self) -> 'TeSrlgs':
+            pass
+
+
+class TeSrlgs(
+        YANGContainer,
+        metaclass=TeSrlgsMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-srlgs
+    """
+
+    _yang_name: Final[str] = 'te-srlgs'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeSrlgs':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py
new file mode 100644
index 000000000..e53a6620d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py
@@ -0,0 +1,105 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay
+    """
+    from .primary_path import PrimaryPath
+    from .tunnel_termination_points import TunnelTerminationPoints
+    from .tunnels import Tunnels
+    from .backup_path import BackupPath
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay
+        """
+
+        def __init__(self):
+            super().__init__(Underlay)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Underlay':
+            pass
+
+        def __enter__(self) -> 'Underlay':
+            pass
+
+
+class Underlay(
+        YANGContainer,
+        metaclass=UnderlayMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay
+    """
+
+    _yang_name: Final[str] = 'underlay'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'enabled': (
+            enabled := YANGLeafMember(
+                'enabled',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'protection-type': (
+            protection_type := YANGLeafMember(
+                'protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'primary-path': (
+            primary_path := (  # YANGContainerMember(
+                UnderlayMeta.
+                PrimaryPath.
+                yang_container_descriptor())),
+
+        'tunnel-termination-points': (
+            tunnel_termination_points := (  # YANGContainerMember(
+                UnderlayMeta.
+                TunnelTerminationPoints.
+                yang_container_descriptor())),
+
+        'tunnels': (
+            tunnels := (  # YANGContainerMember(
+                UnderlayMeta.
+                Tunnels.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'backup-path': (
+            backup_path := (  # YANGListMember(
+                UnderlayMeta.
+                BackupPath.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Underlay':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py
new file mode 100644
index 000000000..e171685ed
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BackupPathMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: backup-path
+    """
+    from .path_element import PathElement
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: backup-path
+        """
+
+        def __init__(self):
+            super().__init__(BackupPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['BackupPath']:
+            pass
+
+        def __iter__(self, key) -> Iterator['BackupPath']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'BackupPath':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            pass
+
+
+class BackupPath(
+        YANGListItem,
+        metaclass=BackupPathMeta):
+    """
+    YANG list item handler.
+
+    YANG name: backup-path
+    """
+
+    _yang_name: Final[str] = 'backup-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                BackupPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'BackupPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
new file mode 100644
index 000000000..124e1d8a7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_link_hop import NumberedLinkHop
+    from .numbered_node_hop import NumberedNodeHop
+    from .label import Label
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..2b93eb52c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..8eeaf7fb4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py
new file mode 100644
index 000000000..234d5abd9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PrimaryPathMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: primary-path
+    """
+    from .path_element import PathElement
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: primary-path
+        """
+
+        def __init__(self):
+            super().__init__(PrimaryPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'PrimaryPathMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PrimaryPath':
+            pass
+
+        def __enter__(self) -> 'PrimaryPath':
+            pass
+
+
+class PrimaryPath(
+        YANGContainer,
+        metaclass=PrimaryPathMeta):
+    """
+    YANG container handler.
+
+    YANG name: primary-path
+    """
+
+    _yang_name: Final[str] = 'primary-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                PrimaryPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PrimaryPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
new file mode 100644
index 000000000..e7036d182
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+    from .label import Label
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..112f1efd7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..53c58714d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py
new file mode 100644
index 000000000..77b2be0c6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelTerminationPointsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnel-termination-points
+        """
+
+        def __init__(self):
+            super().__init__(TunnelTerminationPoints)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelTerminationPointsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TunnelTerminationPoints':
+            pass
+
+        def __enter__(self) -> 'TunnelTerminationPoints':
+            pass
+
+
+class TunnelTerminationPoints(
+        YANGContainer,
+        metaclass=TunnelTerminationPointsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    _yang_name: Final[str] = 'tunnel-termination-points'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'destination': (
+            destination := YANGLeafMember(
+                'destination',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'source': (
+            source := YANGLeafMember(
+                'source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TunnelTerminationPoints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py
new file mode 100644
index 000000000..7de6a1597
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnels
+    """
+    from .tunnel import Tunnel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnels
+        """
+
+        def __init__(self):
+            super().__init__(Tunnels)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tunnels':
+            pass
+
+        def __enter__(self) -> 'Tunnels':
+            pass
+
+
+class Tunnels(
+        YANGContainer,
+        metaclass=TunnelsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnels
+    """
+
+    _yang_name: Final[str] = 'tunnels'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tunnel': (
+            tunnel := (  # YANGListMember(
+                TunnelsMeta.
+                Tunnel.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnels':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py
new file mode 100644
index 000000000..688794184
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tunnel
+        """
+
+        def __init__(self):
+            super().__init__(Tunnel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tunnel']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tunnel']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tunnel':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            pass
+
+
+class Tunnel(
+        YANGListItem,
+        metaclass=TunnelMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    _yang_name: Final[str] = 'tunnel'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tunnel-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'tunnel-name': (
+            tunnel_name := YANGLeafMember(
+                'tunnel-name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py
new file mode 100644
index 000000000..1a56afee4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnreservedBandwidthMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: unreserved-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: unreserved-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(UnreservedBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnreservedBandwidthMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['UnreservedBandwidth']:
+            pass
+
+        def __iter__(self, key) -> Iterator['UnreservedBandwidth']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'UnreservedBandwidth':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'UnreservedBandwidthMeta.yang_list_descriptor'):
+            pass
+
+
+class UnreservedBandwidth(
+        YANGListItem,
+        metaclass=UnreservedBandwidthMeta):
+    """
+    YANG list item handler.
+
+    YANG name: unreserved-bandwidth
+    """
+
+    _yang_name: Final[str] = 'unreserved-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'priority',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'priority': (
+            priority := YANGLeafMember(
+                'priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                UnreservedBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnreservedBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py
new file mode 100644
index 000000000..f7201dfed
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay
+        """
+
+        def __init__(self):
+            super().__init__(Underlay)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Underlay':
+            pass
+
+        def __enter__(self) -> 'Underlay':
+            pass
+
+
+class Underlay(
+        YANGContainer,
+        metaclass=UnderlayMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay
+    """
+
+    _yang_name: Final[str] = 'underlay'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'dynamic': (
+            dynamic := YANGLeafMember(
+                'dynamic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'committed': (
+            committed := YANGLeafMember(
+                'committed',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Underlay':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/__init__.py
new file mode 100644
index 000000000..86e4afaf4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NetworkTypesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: network-types
+    """
+    from .te_topology import TeTopology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: network-types
+        """
+
+        def __init__(self):
+            super().__init__(NetworkTypes)
+
+        def __get__(self, instance, owner=None) -> (
+                'NetworkTypesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NetworkTypes':
+            pass
+
+        def __enter__(self) -> 'NetworkTypes':
+            pass
+
+
+class NetworkTypes(
+        YANGContainer,
+        metaclass=NetworkTypesMeta):
+    """
+    YANG container handler.
+
+    YANG name: network-types
+    """
+
+    _yang_name: Final[str] = 'network-types'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network'
+    _yang_module_name: Final[str] = 'ietf-network'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-topology': (
+            te_topology := (  # YANGContainerMember(
+                NetworkTypesMeta.
+                TeTopology.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NetworkTypes':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py
new file mode 100644
index 000000000..5166c5cb7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeTopologyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-topology
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-topology
+        """
+
+        def __init__(self):
+            super().__init__(TeTopology)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeTopologyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeTopology':
+            pass
+
+        def __enter__(self) -> 'TeTopology':
+            pass
+
+
+class TeTopology(
+        YANGContainer,
+        metaclass=TeTopologyMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-topology
+    """
+
+    _yang_name: Final[str] = 'te-topology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeTopology':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/__init__.py
new file mode 100644
index 000000000..cc378c4aa
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/__init__.py
@@ -0,0 +1,109 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NodeMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: node
+    """
+    from .te import Te
+    from .termination_point import TerminationPoint
+    from .supporting_node import SupportingNode
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: node
+        """
+
+        def __init__(self):
+            super().__init__(Node)
+
+        def __get__(self, instance, owner=None) -> (
+                'NodeMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Node']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Node']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Node':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'NodeMeta.yang_list_descriptor'):
+            pass
+
+
+class Node(
+        YANGListItem,
+        metaclass=NodeMeta):
+    """
+    YANG list item handler.
+
+    YANG name: node
+    """
+
+    _yang_name: Final[str] = 'node'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network'
+    _yang_module_name: Final[str] = 'ietf-network'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'node-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'te-node-id': (
+            te_node_id := YANGLeafMember(
+                'te-node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network',
+                'ietf-network')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te': (
+            te := (  # YANGContainerMember(
+                NodeMeta.
+                Te.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'termination-point': (
+            termination_point := (  # YANGListMember(
+                NodeMeta.
+                TerminationPoint.
+                yang_list_descriptor())),
+
+        'supporting-node': (
+            supporting_node := (  # YANGListMember(
+                NodeMeta.
+                SupportingNode.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Node':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py
new file mode 100644
index 000000000..39cd03606
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SupportingNodeMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: supporting-node
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: supporting-node
+        """
+
+        def __init__(self):
+            super().__init__(SupportingNode)
+
+        def __get__(self, instance, owner=None) -> (
+                'SupportingNodeMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['SupportingNode']:
+            pass
+
+        def __iter__(self, key) -> Iterator['SupportingNode']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'SupportingNode':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'SupportingNodeMeta.yang_list_descriptor'):
+            pass
+
+
+class SupportingNode(
+        YANGListItem,
+        metaclass=SupportingNodeMeta):
+    """
+    YANG list item handler.
+
+    YANG name: supporting-node
+    """
+
+    _yang_name: Final[str] = 'supporting-node'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network'
+    _yang_module_name: Final[str] = 'ietf-network'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'network-ref',
+        'node-ref',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-network',
+                'ietf-network')),
+
+        'node-ref': (
+            node_ref := YANGLeafMember(
+                'node-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-network',
+                'ietf-network')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SupportingNode':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/__init__.py
new file mode 100644
index 000000000..2e2b8f13b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/__init__.py
@@ -0,0 +1,131 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te
+    """
+    from .statistics import Statistics
+    from .geolocation import Geolocation
+    from .te_node_attributes import TeNodeAttributes
+    from .information_source_state import InformationSourceState
+    from .tunnel_termination_point import TunnelTerminationPoint
+    from .information_source_entry import InformationSourceEntry
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te
+        """
+
+        def __init__(self):
+            super().__init__(Te)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Te':
+            pass
+
+        def __enter__(self) -> 'Te':
+            pass
+
+
+class Te(
+        YANGContainer,
+        metaclass=TeMeta):
+    """
+    YANG container handler.
+
+    YANG name: te
+    """
+
+    _yang_name: Final[str] = 'te'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'oper-status': (
+            oper_status := YANGLeafMember(
+                'oper-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'information-source': (
+            information_source := YANGLeafMember(
+                'information-source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'information-source-instance': (
+            information_source_instance := YANGLeafMember(
+                'information-source-instance',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'is-multi-access-dr': (
+            is_multi_access_dr := YANGLeafMember(
+                'is-multi-access-dr',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'statistics': (
+            statistics := (  # YANGContainerMember(
+                TeMeta.
+                Statistics.
+                yang_container_descriptor())),
+
+        'geolocation': (
+            geolocation := (  # YANGContainerMember(
+                TeMeta.
+                Geolocation.
+                yang_container_descriptor())),
+
+        'te-node-attributes': (
+            te_node_attributes := (  # YANGContainerMember(
+                TeMeta.
+                TeNodeAttributes.
+                yang_container_descriptor())),
+
+        'information-source-state': (
+            information_source_state := (  # YANGContainerMember(
+                TeMeta.
+                InformationSourceState.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tunnel-termination-point': (
+            tunnel_termination_point := (  # YANGListMember(
+                TeMeta.
+                TunnelTerminationPoint.
+                yang_list_descriptor())),
+
+        'information-source-entry': (
+            information_source_entry := (  # YANGListMember(
+                TeMeta.
+                InformationSourceEntry.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Te':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py
new file mode 100644
index 000000000..03acbb83b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GeolocationMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: geolocation
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: geolocation
+        """
+
+        def __init__(self):
+            super().__init__(Geolocation)
+
+        def __get__(self, instance, owner=None) -> (
+                'GeolocationMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Geolocation':
+            pass
+
+        def __enter__(self) -> 'Geolocation':
+            pass
+
+
+class Geolocation(
+        YANGContainer,
+        metaclass=GeolocationMeta):
+    """
+    YANG container handler.
+
+    YANG name: geolocation
+    """
+
+    _yang_name: Final[str] = 'geolocation'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'latitude': (
+            latitude := YANGLeafMember(
+                'latitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'altitude': (
+            altitude := YANGLeafMember(
+                'altitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'longitude': (
+            longitude := YANGLeafMember(
+                'longitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Geolocation':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py
new file mode 100644
index 000000000..56c0d3f21
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py
@@ -0,0 +1,128 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class InformationSourceEntryMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: information-source-entry
+    """
+    from .information_source_state import InformationSourceState
+    from .underlay_topology import UnderlayTopology
+    from .connectivity_matrices import ConnectivityMatrices
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: information-source-entry
+        """
+
+        def __init__(self):
+            super().__init__(InformationSourceEntry)
+
+        def __get__(self, instance, owner=None) -> (
+                'InformationSourceEntryMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['InformationSourceEntry']:
+            pass
+
+        def __iter__(self, key) -> Iterator['InformationSourceEntry']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'InformationSourceEntry':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'InformationSourceEntryMeta.yang_list_descriptor'):
+            pass
+
+
+class InformationSourceEntry(
+        YANGListItem,
+        metaclass=InformationSourceEntryMeta):
+    """
+    YANG list item handler.
+
+    YANG name: information-source-entry
+    """
+
+    _yang_name: Final[str] = 'information-source-entry'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'information-source',
+        'information-source-instance',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'information-source': (
+            information_source := YANGLeafMember(
+                'information-source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'domain-id': (
+            domain_id := YANGLeafMember(
+                'domain-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'is-abstract': (
+            is_abstract := YANGLeafMember(
+                'is-abstract',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'information-source-instance': (
+            information_source_instance := YANGLeafMember(
+                'information-source-instance',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'information-source-state': (
+            information_source_state := (  # YANGContainerMember(
+                InformationSourceEntryMeta.
+                InformationSourceState.
+                yang_container_descriptor())),
+
+        'underlay-topology': (
+            underlay_topology := (  # YANGContainerMember(
+                InformationSourceEntryMeta.
+                UnderlayTopology.
+                yang_container_descriptor())),
+
+        'connectivity-matrices': (
+            connectivity_matrices := (  # YANGContainerMember(
+                InformationSourceEntryMeta.
+                ConnectivityMatrices.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'InformationSourceEntry':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py
new file mode 100644
index 000000000..690419c4e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py
@@ -0,0 +1,119 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectivityMatricesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: connectivity-matrices
+    """
+    from .path_properties import PathProperties
+    from .path_constraints import PathConstraints
+    from .optimizations import Optimizations
+    from .underlay import Underlay
+    from .label_restrictions import LabelRestrictions
+    from .connectivity_matrix import ConnectivityMatrix
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: connectivity-matrices
+        """
+
+        def __init__(self):
+            super().__init__(ConnectivityMatrices)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectivityMatricesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ConnectivityMatrices':
+            pass
+
+        def __enter__(self) -> 'ConnectivityMatrices':
+            pass
+
+
+class ConnectivityMatrices(
+        YANGContainer,
+        metaclass=ConnectivityMatricesMeta):
+    """
+    YANG container handler.
+
+    YANG name: connectivity-matrices
+    """
+
+    _yang_name: Final[str] = 'connectivity-matrices'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'number-of-entries': (
+            number_of_entries := YANGLeafMember(
+                'number-of-entries',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'is-allowed': (
+            is_allowed := YANGLeafMember(
+                'is-allowed',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-properties': (
+            path_properties := (  # YANGContainerMember(
+                ConnectivityMatricesMeta.
+                PathProperties.
+                yang_container_descriptor())),
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                ConnectivityMatricesMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+
+        'optimizations': (
+            optimizations := (  # YANGContainerMember(
+                ConnectivityMatricesMeta.
+                Optimizations.
+                yang_container_descriptor())),
+
+        'underlay': (
+            underlay := (  # YANGContainerMember(
+                ConnectivityMatricesMeta.
+                Underlay.
+                yang_container_descriptor())),
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                ConnectivityMatricesMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'connectivity-matrix': (
+            connectivity_matrix := (  # YANGListMember(
+                ConnectivityMatricesMeta.
+                ConnectivityMatrix.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ConnectivityMatrices':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py
new file mode 100644
index 000000000..3e001f9b6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py
@@ -0,0 +1,130 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectivityMatrixMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: connectivity-matrix
+    """
+    from .to import To
+    from .underlay import Underlay
+    from .path_properties import PathProperties
+    from .optimizations import Optimizations
+    from .from import From
+    from .path_constraints import PathConstraints
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: connectivity-matrix
+        """
+
+        def __init__(self):
+            super().__init__(ConnectivityMatrix)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectivityMatrixMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['ConnectivityMatrix']:
+            pass
+
+        def __iter__(self, key) -> Iterator['ConnectivityMatrix']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'ConnectivityMatrix':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'ConnectivityMatrixMeta.yang_list_descriptor'):
+            pass
+
+
+class ConnectivityMatrix(
+        YANGListItem,
+        metaclass=ConnectivityMatrixMeta):
+    """
+    YANG list item handler.
+
+    YANG name: connectivity-matrix
+    """
+
+    _yang_name: Final[str] = 'connectivity-matrix'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'id': (
+            id := YANGLeafMember(
+                'id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'is-allowed': (
+            is_allowed := YANGLeafMember(
+                'is-allowed',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'to': (
+            to := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                To.
+                yang_container_descriptor())),
+
+        'underlay': (
+            underlay := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                Underlay.
+                yang_container_descriptor())),
+
+        'path-properties': (
+            path_properties := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                PathProperties.
+                yang_container_descriptor())),
+
+        'optimizations': (
+            optimizations := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                Optimizations.
+                yang_container_descriptor())),
+
+        'from': (
+            from := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                From.
+                yang_container_descriptor())),
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ConnectivityMatrix':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py
new file mode 100644
index 000000000..d788deceb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class FromMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: from
+    """
+    from .label_restrictions import LabelRestrictions
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: from
+        """
+
+        def __init__(self):
+            super().__init__(From)
+
+        def __get__(self, instance, owner=None) -> (
+                'FromMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'From':
+            pass
+
+        def __enter__(self) -> 'From':
+            pass
+
+
+class From(
+        YANGContainer,
+        metaclass=FromMeta):
+    """
+    YANG container handler.
+
+    YANG name: from
+    """
+
+    _yang_name: Final[str] = 'from'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tp-ref': (
+            tp_ref := YANGLeafMember(
+                'tp-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                FromMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'From':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..375cab621
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_start import LabelStart
+    from .label_step import LabelStep
+    from .label_end import LabelEnd
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
new file mode 100644
index 000000000..2b4686f49
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: optimizations
+    """
+    from .algorithm import Algorithm
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: optimizations
+        """
+
+        def __init__(self):
+            super().__init__(Optimizations)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Optimizations':
+            pass
+
+        def __enter__(self) -> 'Optimizations':
+            pass
+
+
+class Optimizations(
+        YANGContainer,
+        metaclass=OptimizationsMeta):
+    """
+    YANG container handler.
+
+    YANG name: optimizations
+    """
+
+    _yang_name: Final[str] = 'optimizations'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Optimizations':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'algorithm':
+                OptimizationsMeta.Algorithm(
+                    instance),
+        }
+        return instance
+
+    @property
+    def algorithm(self) -> (
+            OptimizationsMeta.Algorithm):
+        return self._yang_choices['algorithm']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
new file mode 100644
index 000000000..d48108c45
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AlgorithmMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    from .objective_function import ObjectiveFunction
+    from .metric import Metric
+
+    class objective_function_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.objective_function_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+    class metric_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.metric_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+
+class Algorithm(YANGChoice, metaclass=AlgorithmMeta):
+    """
+    YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    _yang_name: Final[str] = 'algorithm'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'objective-function': (
+            objective_function := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                objective_function_case_descriptor())),
+
+        'metric': (
+            metric := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                metric_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
new file mode 100644
index 000000000..ba25f70a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric
+    """
+    from .tiebreakers import Tiebreakers
+    from .optimization_metric import OptimizationMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Metric':
+            pass
+
+        def __enter__(self) -> 'Metric':
+            pass
+
+
+class Metric(
+        YANGContainer,
+        metaclass=MetricMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric
+    """
+
+    _yang_name: Final[str] = 'metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'tiebreakers': (
+            tiebreakers := (  # YANGContainerMember(
+                MetricMeta.
+                Tiebreakers.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'optimization-metric': (
+            optimization_metric := (  # YANGListMember(
+                MetricMeta.
+                OptimizationMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Metric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
new file mode 100644
index 000000000..1af0255d0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -0,0 +1,102 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+    from .explicit_route_include_objects import ExplicitRouteIncludeObjects
+    from .explicit_route_exclude_objects import ExplicitRouteExcludeObjects
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: optimization-metric
+        """
+
+        def __init__(self):
+            super().__init__(OptimizationMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['OptimizationMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['OptimizationMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'OptimizationMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class OptimizationMetric(
+        YANGListItem,
+        metaclass=OptimizationMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+
+    _yang_name: Final[str] = 'optimization-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'weight': (
+            weight := YANGLeafMember(
+                'weight',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'explicit-route-include-objects': (
+            explicit_route_include_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteIncludeObjects.
+                yang_container_descriptor())),
+
+        'explicit-route-exclude-objects': (
+            explicit_route_exclude_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteExcludeObjects.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'OptimizationMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
new file mode 100644
index 000000000..533135c80
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteExcludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+    from .route_object_exclude_object import RouteObjectExcludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-exclude-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteExcludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteExcludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+
+class ExplicitRouteExcludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteExcludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-exclude-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-exclude-object': (
+            route_object_exclude_object := (  # YANGListMember(
+                ExplicitRouteExcludeObjectsMeta.
+                RouteObjectExcludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteExcludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
new file mode 100644
index 000000000..5087d7cc0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectExcludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-exclude-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectExcludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectExcludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectExcludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectExcludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectExcludeObject(
+        YANGListItem,
+        metaclass=RouteObjectExcludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+
+    _yang_name: Final[str] = 'route-object-exclude-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectExcludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectExcludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectExcludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
new file mode 100644
index 000000000..395907423
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -0,0 +1,203 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .label import Label
+    from .numbered_link_hop import NumberedLinkHop
+    from .numbered_node_hop import NumberedNodeHop
+    from .as_number import AsNumber
+    from .srlg import Srlg
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class srlg_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.srlg_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'srlg': (
+            srlg := (  # YANGChoiceCase(
+                TypeMeta.
+                srlg_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d1e221440
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
new file mode 100644
index 000000000..45158154d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+    from .srlg import Srlg
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'srlg': (
+            srlg := (  # YANGContainerMember(
+                SrlgMeta.
+                Srlg.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
new file mode 100644
index 000000000..9fcacd871
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'srlg': (
+            srlg := YANGLeafMember(
+                'srlg',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..53c58714d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
new file mode 100644
index 000000000..80379d1e5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteIncludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+    from .route_object_include_object import RouteObjectIncludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-include-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteIncludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteIncludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+
+class ExplicitRouteIncludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteIncludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-include-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-include-object': (
+            route_object_include_object := (  # YANGListMember(
+                ExplicitRouteIncludeObjectsMeta.
+                RouteObjectIncludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteIncludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
new file mode 100644
index 000000000..eea621be3
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectIncludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-include-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectIncludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectIncludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectIncludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectIncludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectIncludeObject(
+        YANGListItem,
+        metaclass=RouteObjectIncludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+
+    _yang_name: Final[str] = 'route-object-include-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectIncludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectIncludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectIncludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
new file mode 100644
index 000000000..fd4790c46
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .numbered_node_hop import NumberedNodeHop
+    from .label import Label
+    from .as_number import AsNumber
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d149cb890
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..53c58714d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
new file mode 100644
index 000000000..b4a935a13
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakersMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tiebreakers
+    """
+    from .tiebreaker import Tiebreaker
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tiebreakers
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreakers)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakersMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tiebreakers':
+            pass
+
+        def __enter__(self) -> 'Tiebreakers':
+            pass
+
+
+class Tiebreakers(
+        YANGContainer,
+        metaclass=TiebreakersMeta):
+    """
+    YANG container handler.
+
+    YANG name: tiebreakers
+    """
+
+    _yang_name: Final[str] = 'tiebreakers'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tiebreaker': (
+            tiebreaker := (  # YANGListMember(
+                TiebreakersMeta.
+                Tiebreaker.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreakers':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
new file mode 100644
index 000000000..46d26281e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakerMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tiebreaker
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreaker)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tiebreaker']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tiebreaker']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tiebreaker':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            pass
+
+
+class Tiebreaker(
+        YANGListItem,
+        metaclass=TiebreakerMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    _yang_name: Final[str] = 'tiebreaker'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tiebreaker-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tiebreaker-type': (
+            tiebreaker_type := YANGLeafMember(
+                'tiebreaker-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreaker':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
new file mode 100644
index 000000000..0154fb6cb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+    from .objective_function import ObjectiveFunction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'objective-function': (
+            objective_function := (  # YANGContainerMember(
+                ObjectiveFunctionMeta.
+                ObjectiveFunction.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
new file mode 100644
index 000000000..3fc193984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'objective-function-type': (
+            objective_function_type := YANGLeafMember(
+                'objective-function-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
new file mode 100644
index 000000000..252ce7377
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
@@ -0,0 +1,137 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+    from .te_bandwidth import TeBandwidth
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_srlgs_names import PathSrlgsNames
+    from .path_affinity_names import PathAffinityNames
+    from .path_metric_bounds import PathMetricBounds
+    from .path_affinities_values import PathAffinitiesValues
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hold-priority': (
+            hold_priority := YANGLeafMember(
+                'hold-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'setup-priority': (
+            setup_priority := YANGLeafMember(
+                'setup-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'signaling-type': (
+            signaling_type := YANGLeafMember(
+                'signaling-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disjointness': (
+            disjointness := YANGLeafMember(
+                'disjointness',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-protection': (
+            link_protection := YANGLeafMember(
+                'link-protection',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+
+        'path-metric-bounds': (
+            path_metric_bounds := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathMetricBounds.
+                yang_container_descriptor())),
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..3f9a52e85
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
new file mode 100644
index 000000000..a27b60328
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+    from .path_metric_bound import PathMetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathMetricBounds':
+            pass
+
+        def __enter__(self) -> 'PathMetricBounds':
+            pass
+
+
+class PathMetricBounds(
+        YANGContainer,
+        metaclass=PathMetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+
+    _yang_name: Final[str] = 'path-metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric-bound': (
+            path_metric_bound := (  # YANGListMember(
+                PathMetricBoundsMeta.
+                PathMetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
new file mode 100644
index 000000000..fc5cf4902
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetricBound(
+        YANGListItem,
+        metaclass=PathMetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    _yang_name: Final[str] = 'path-metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'upper-bound': (
+            upper_bound := YANGLeafMember(
+                'upper-bound',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
new file mode 100644
index 000000000..51a66b728
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
@@ -0,0 +1,107 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathPropertiesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-properties
+    """
+    from .path_route_objects import PathRouteObjects
+    from .path_srlgs_names import PathSrlgsNames
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_affinities_values import PathAffinitiesValues
+    from .path_affinity_names import PathAffinityNames
+    from .path_metric import PathMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-properties
+        """
+
+        def __init__(self):
+            super().__init__(PathProperties)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathPropertiesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathProperties':
+            pass
+
+        def __enter__(self) -> 'PathProperties':
+            pass
+
+
+class PathProperties(
+        YANGContainer,
+        metaclass=PathPropertiesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-properties
+    """
+
+    _yang_name: Final[str] = 'path-properties'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-route-objects': (
+            path_route_objects := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathRouteObjects.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric': (
+            path_metric := (  # YANGListMember(
+                PathPropertiesMeta.
+                PathMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathProperties':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..3f9a52e85
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
new file mode 100644
index 000000000..1bd538acf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric
+        """
+
+        def __init__(self):
+            super().__init__(PathMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetric(
+        YANGListItem,
+        metaclass=PathMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    _yang_name: Final[str] = 'path-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'accumulative-value': (
+            accumulative_value := YANGLeafMember(
+                'accumulative-value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
new file mode 100644
index 000000000..8510c6065
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-route-objects
+    """
+    from .path_route_object import PathRouteObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-route-objects
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathRouteObjects':
+            pass
+
+        def __enter__(self) -> 'PathRouteObjects':
+            pass
+
+
+class PathRouteObjects(
+        YANGContainer,
+        metaclass=PathRouteObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-route-objects
+    """
+
+    _yang_name: Final[str] = 'path-route-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-route-object': (
+            path_route_object := (  # YANGListMember(
+                PathRouteObjectsMeta.
+                PathRouteObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
new file mode 100644
index 000000000..ff6bafe2a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-route-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-route-object
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathRouteObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathRouteObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathRouteObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class PathRouteObject(
+        YANGListItem,
+        metaclass=PathRouteObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-route-object
+    """
+
+    _yang_name: Final[str] = 'path-route-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathRouteObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathRouteObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
new file mode 100644
index 000000000..47aec8c27
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .label import Label
+    from .numbered_link_hop import NumberedLinkHop
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0b962af7a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..bb89d03ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py
new file mode 100644
index 000000000..91479267b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ToMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: to
+    """
+    from .label_restrictions import LabelRestrictions
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: to
+        """
+
+        def __init__(self):
+            super().__init__(To)
+
+        def __get__(self, instance, owner=None) -> (
+                'ToMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'To':
+            pass
+
+        def __enter__(self) -> 'To':
+            pass
+
+
+class To(
+        YANGContainer,
+        metaclass=ToMeta):
+    """
+    YANG container handler.
+
+    YANG name: to
+    """
+
+    _yang_name: Final[str] = 'to'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tp-ref': (
+            tp_ref := YANGLeafMember(
+                'tp-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                ToMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'To':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..a075e7335
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_end import LabelEnd
+    from .label_start import LabelStart
+    from .label_step import LabelStep
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py
new file mode 100644
index 000000000..239e5c159
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py
@@ -0,0 +1,105 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay
+    """
+    from .primary_path import PrimaryPath
+    from .tunnels import Tunnels
+    from .tunnel_termination_points import TunnelTerminationPoints
+    from .backup_path import BackupPath
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay
+        """
+
+        def __init__(self):
+            super().__init__(Underlay)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Underlay':
+            pass
+
+        def __enter__(self) -> 'Underlay':
+            pass
+
+
+class Underlay(
+        YANGContainer,
+        metaclass=UnderlayMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay
+    """
+
+    _yang_name: Final[str] = 'underlay'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'protection-type': (
+            protection_type := YANGLeafMember(
+                'protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'enabled': (
+            enabled := YANGLeafMember(
+                'enabled',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'primary-path': (
+            primary_path := (  # YANGContainerMember(
+                UnderlayMeta.
+                PrimaryPath.
+                yang_container_descriptor())),
+
+        'tunnels': (
+            tunnels := (  # YANGContainerMember(
+                UnderlayMeta.
+                Tunnels.
+                yang_container_descriptor())),
+
+        'tunnel-termination-points': (
+            tunnel_termination_points := (  # YANGContainerMember(
+                UnderlayMeta.
+                TunnelTerminationPoints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'backup-path': (
+            backup_path := (  # YANGListMember(
+                UnderlayMeta.
+                BackupPath.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Underlay':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
new file mode 100644
index 000000000..e171685ed
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BackupPathMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: backup-path
+    """
+    from .path_element import PathElement
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: backup-path
+        """
+
+        def __init__(self):
+            super().__init__(BackupPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['BackupPath']:
+            pass
+
+        def __iter__(self, key) -> Iterator['BackupPath']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'BackupPath':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            pass
+
+
+class BackupPath(
+        YANGListItem,
+        metaclass=BackupPathMeta):
+    """
+    YANG list item handler.
+
+    YANG name: backup-path
+    """
+
+    _yang_name: Final[str] = 'backup-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                BackupPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'BackupPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
new file mode 100644
index 000000000..3eb16d3c3
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .label import Label
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .numbered_link_hop import NumberedLinkHop
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d1e221440
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..c5173e59b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
new file mode 100644
index 000000000..234d5abd9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PrimaryPathMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: primary-path
+    """
+    from .path_element import PathElement
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: primary-path
+        """
+
+        def __init__(self):
+            super().__init__(PrimaryPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'PrimaryPathMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PrimaryPath':
+            pass
+
+        def __enter__(self) -> 'PrimaryPath':
+            pass
+
+
+class PrimaryPath(
+        YANGContainer,
+        metaclass=PrimaryPathMeta):
+    """
+    YANG container handler.
+
+    YANG name: primary-path
+    """
+
+    _yang_name: Final[str] = 'primary-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                PrimaryPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PrimaryPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
new file mode 100644
index 000000000..9a74c5dee
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .label import Label
+    from .numbered_link_hop import NumberedLinkHop
+    from .numbered_node_hop import NumberedNodeHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d149cb890
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..2c8c537d1
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
new file mode 100644
index 000000000..77b2be0c6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelTerminationPointsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnel-termination-points
+        """
+
+        def __init__(self):
+            super().__init__(TunnelTerminationPoints)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelTerminationPointsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TunnelTerminationPoints':
+            pass
+
+        def __enter__(self) -> 'TunnelTerminationPoints':
+            pass
+
+
+class TunnelTerminationPoints(
+        YANGContainer,
+        metaclass=TunnelTerminationPointsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    _yang_name: Final[str] = 'tunnel-termination-points'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'destination': (
+            destination := YANGLeafMember(
+                'destination',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'source': (
+            source := YANGLeafMember(
+                'source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TunnelTerminationPoints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
new file mode 100644
index 000000000..7de6a1597
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnels
+    """
+    from .tunnel import Tunnel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnels
+        """
+
+        def __init__(self):
+            super().__init__(Tunnels)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tunnels':
+            pass
+
+        def __enter__(self) -> 'Tunnels':
+            pass
+
+
+class Tunnels(
+        YANGContainer,
+        metaclass=TunnelsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnels
+    """
+
+    _yang_name: Final[str] = 'tunnels'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tunnel': (
+            tunnel := (  # YANGListMember(
+                TunnelsMeta.
+                Tunnel.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnels':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
new file mode 100644
index 000000000..688794184
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tunnel
+        """
+
+        def __init__(self):
+            super().__init__(Tunnel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tunnel']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tunnel']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tunnel':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            pass
+
+
+class Tunnel(
+        YANGListItem,
+        metaclass=TunnelMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    _yang_name: Final[str] = 'tunnel'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tunnel-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'tunnel-name': (
+            tunnel_name := YANGLeafMember(
+                'tunnel-name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..02d20d436
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_step import LabelStep
+    from .label_start import LabelStart
+    from .label_end import LabelEnd
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py
new file mode 100644
index 000000000..2b4686f49
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: optimizations
+    """
+    from .algorithm import Algorithm
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: optimizations
+        """
+
+        def __init__(self):
+            super().__init__(Optimizations)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Optimizations':
+            pass
+
+        def __enter__(self) -> 'Optimizations':
+            pass
+
+
+class Optimizations(
+        YANGContainer,
+        metaclass=OptimizationsMeta):
+    """
+    YANG container handler.
+
+    YANG name: optimizations
+    """
+
+    _yang_name: Final[str] = 'optimizations'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Optimizations':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'algorithm':
+                OptimizationsMeta.Algorithm(
+                    instance),
+        }
+        return instance
+
+    @property
+    def algorithm(self) -> (
+            OptimizationsMeta.Algorithm):
+        return self._yang_choices['algorithm']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py
new file mode 100644
index 000000000..ba8324e25
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AlgorithmMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    from .metric import Metric
+    from .objective_function import ObjectiveFunction
+
+    class metric_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.metric_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+    class objective_function_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.objective_function_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+
+class Algorithm(YANGChoice, metaclass=AlgorithmMeta):
+    """
+    YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    _yang_name: Final[str] = 'algorithm'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'metric': (
+            metric := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                metric_case_descriptor())),
+
+        'objective-function': (
+            objective_function := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                objective_function_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py
new file mode 100644
index 000000000..ba25f70a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric
+    """
+    from .tiebreakers import Tiebreakers
+    from .optimization_metric import OptimizationMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Metric':
+            pass
+
+        def __enter__(self) -> 'Metric':
+            pass
+
+
+class Metric(
+        YANGContainer,
+        metaclass=MetricMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric
+    """
+
+    _yang_name: Final[str] = 'metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'tiebreakers': (
+            tiebreakers := (  # YANGContainerMember(
+                MetricMeta.
+                Tiebreakers.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'optimization-metric': (
+            optimization_metric := (  # YANGListMember(
+                MetricMeta.
+                OptimizationMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Metric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
new file mode 100644
index 000000000..dc59c2850
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -0,0 +1,102 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+    from .explicit_route_exclude_objects import ExplicitRouteExcludeObjects
+    from .explicit_route_include_objects import ExplicitRouteIncludeObjects
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: optimization-metric
+        """
+
+        def __init__(self):
+            super().__init__(OptimizationMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['OptimizationMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['OptimizationMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'OptimizationMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class OptimizationMetric(
+        YANGListItem,
+        metaclass=OptimizationMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+
+    _yang_name: Final[str] = 'optimization-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'weight': (
+            weight := YANGLeafMember(
+                'weight',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'explicit-route-exclude-objects': (
+            explicit_route_exclude_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteExcludeObjects.
+                yang_container_descriptor())),
+
+        'explicit-route-include-objects': (
+            explicit_route_include_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteIncludeObjects.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'OptimizationMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
new file mode 100644
index 000000000..533135c80
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteExcludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+    from .route_object_exclude_object import RouteObjectExcludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-exclude-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteExcludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteExcludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+
+class ExplicitRouteExcludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteExcludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-exclude-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-exclude-object': (
+            route_object_exclude_object := (  # YANGListMember(
+                ExplicitRouteExcludeObjectsMeta.
+                RouteObjectExcludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteExcludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
new file mode 100644
index 000000000..5087d7cc0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectExcludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-exclude-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectExcludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectExcludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectExcludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectExcludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectExcludeObject(
+        YANGListItem,
+        metaclass=RouteObjectExcludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+
+    _yang_name: Final[str] = 'route-object-exclude-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectExcludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectExcludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectExcludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
new file mode 100644
index 000000000..1cf6b0beb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -0,0 +1,203 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .label import Label
+    from .srlg import Srlg
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class srlg_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.srlg_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'srlg': (
+            srlg := (  # YANGChoiceCase(
+                TypeMeta.
+                srlg_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..70f0d19f5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
new file mode 100644
index 000000000..45158154d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+    from .srlg import Srlg
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'srlg': (
+            srlg := (  # YANGContainerMember(
+                SrlgMeta.
+                Srlg.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
new file mode 100644
index 000000000..9fcacd871
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'srlg': (
+            srlg := YANGLeafMember(
+                'srlg',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..522417002
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
new file mode 100644
index 000000000..80379d1e5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteIncludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+    from .route_object_include_object import RouteObjectIncludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-include-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteIncludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteIncludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+
+class ExplicitRouteIncludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteIncludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-include-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-include-object': (
+            route_object_include_object := (  # YANGListMember(
+                ExplicitRouteIncludeObjectsMeta.
+                RouteObjectIncludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteIncludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
new file mode 100644
index 000000000..eea621be3
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectIncludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-include-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectIncludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectIncludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectIncludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectIncludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectIncludeObject(
+        YANGListItem,
+        metaclass=RouteObjectIncludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+
+    _yang_name: Final[str] = 'route-object-include-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectIncludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectIncludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectIncludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
new file mode 100644
index 000000000..c1db5fae9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .label import Label
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..112f1efd7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..ad0f8f928
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
new file mode 100644
index 000000000..b4a935a13
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakersMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tiebreakers
+    """
+    from .tiebreaker import Tiebreaker
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tiebreakers
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreakers)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakersMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tiebreakers':
+            pass
+
+        def __enter__(self) -> 'Tiebreakers':
+            pass
+
+
+class Tiebreakers(
+        YANGContainer,
+        metaclass=TiebreakersMeta):
+    """
+    YANG container handler.
+
+    YANG name: tiebreakers
+    """
+
+    _yang_name: Final[str] = 'tiebreakers'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tiebreaker': (
+            tiebreaker := (  # YANGListMember(
+                TiebreakersMeta.
+                Tiebreaker.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreakers':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
new file mode 100644
index 000000000..46d26281e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakerMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tiebreaker
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreaker)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tiebreaker']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tiebreaker']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tiebreaker':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            pass
+
+
+class Tiebreaker(
+        YANGListItem,
+        metaclass=TiebreakerMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    _yang_name: Final[str] = 'tiebreaker'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tiebreaker-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tiebreaker-type': (
+            tiebreaker_type := YANGLeafMember(
+                'tiebreaker-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreaker':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
new file mode 100644
index 000000000..0154fb6cb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+    from .objective_function import ObjectiveFunction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'objective-function': (
+            objective_function := (  # YANGContainerMember(
+                ObjectiveFunctionMeta.
+                ObjectiveFunction.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
new file mode 100644
index 000000000..3fc193984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'objective-function-type': (
+            objective_function_type := YANGLeafMember(
+                'objective-function-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py
new file mode 100644
index 000000000..c5dceb474
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py
@@ -0,0 +1,137 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+    from .te_bandwidth import TeBandwidth
+    from .path_metric_bounds import PathMetricBounds
+    from .path_affinities_values import PathAffinitiesValues
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_affinity_names import PathAffinityNames
+    from .path_srlgs_names import PathSrlgsNames
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hold-priority': (
+            hold_priority := YANGLeafMember(
+                'hold-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-protection': (
+            link_protection := YANGLeafMember(
+                'link-protection',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disjointness': (
+            disjointness := YANGLeafMember(
+                'disjointness',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'setup-priority': (
+            setup_priority := YANGLeafMember(
+                'setup-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'signaling-type': (
+            signaling_type := YANGLeafMember(
+                'signaling-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+
+        'path-metric-bounds': (
+            path_metric_bounds := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathMetricBounds.
+                yang_container_descriptor())),
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..cc269dd41
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
new file mode 100644
index 000000000..a27b60328
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+    from .path_metric_bound import PathMetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathMetricBounds':
+            pass
+
+        def __enter__(self) -> 'PathMetricBounds':
+            pass
+
+
+class PathMetricBounds(
+        YANGContainer,
+        metaclass=PathMetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+
+    _yang_name: Final[str] = 'path-metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric-bound': (
+            path_metric_bound := (  # YANGListMember(
+                PathMetricBoundsMeta.
+                PathMetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
new file mode 100644
index 000000000..27ce8642a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetricBound(
+        YANGListItem,
+        metaclass=PathMetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    _yang_name: Final[str] = 'path-metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'upper-bound': (
+            upper_bound := YANGLeafMember(
+                'upper-bound',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py
new file mode 100644
index 000000000..5291acf02
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py
@@ -0,0 +1,107 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathPropertiesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-properties
+    """
+    from .path_affinities_values import PathAffinitiesValues
+    from .path_route_objects import PathRouteObjects
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_affinity_names import PathAffinityNames
+    from .path_srlgs_names import PathSrlgsNames
+    from .path_metric import PathMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-properties
+        """
+
+        def __init__(self):
+            super().__init__(PathProperties)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathPropertiesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathProperties':
+            pass
+
+        def __enter__(self) -> 'PathProperties':
+            pass
+
+
+class PathProperties(
+        YANGContainer,
+        metaclass=PathPropertiesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-properties
+    """
+
+    _yang_name: Final[str] = 'path-properties'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+
+        'path-route-objects': (
+            path_route_objects := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathRouteObjects.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric': (
+            path_metric := (  # YANGListMember(
+                PathPropertiesMeta.
+                PathMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathProperties':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..cc269dd41
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py
new file mode 100644
index 000000000..af4359495
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric
+        """
+
+        def __init__(self):
+            super().__init__(PathMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetric(
+        YANGListItem,
+        metaclass=PathMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    _yang_name: Final[str] = 'path-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'accumulative-value': (
+            accumulative_value := YANGLeafMember(
+                'accumulative-value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py
new file mode 100644
index 000000000..8510c6065
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-route-objects
+    """
+    from .path_route_object import PathRouteObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-route-objects
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathRouteObjects':
+            pass
+
+        def __enter__(self) -> 'PathRouteObjects':
+            pass
+
+
+class PathRouteObjects(
+        YANGContainer,
+        metaclass=PathRouteObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-route-objects
+    """
+
+    _yang_name: Final[str] = 'path-route-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-route-object': (
+            path_route_object := (  # YANGListMember(
+                PathRouteObjectsMeta.
+                PathRouteObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
new file mode 100644
index 000000000..ff6bafe2a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-route-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-route-object
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathRouteObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathRouteObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathRouteObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class PathRouteObject(
+        YANGListItem,
+        metaclass=PathRouteObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-route-object
+    """
+
+    _yang_name: Final[str] = 'path-route-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathRouteObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathRouteObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
new file mode 100644
index 000000000..a66e92d46
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .label import Label
+    from .numbered_node_hop import NumberedNodeHop
+    from .as_number import AsNumber
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .numbered_link_hop import NumberedLinkHop
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..112f1efd7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..ee39d102b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py
new file mode 100644
index 000000000..48105002a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py
@@ -0,0 +1,105 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay
+    """
+    from .tunnels import Tunnels
+    from .tunnel_termination_points import TunnelTerminationPoints
+    from .primary_path import PrimaryPath
+    from .backup_path import BackupPath
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay
+        """
+
+        def __init__(self):
+            super().__init__(Underlay)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Underlay':
+            pass
+
+        def __enter__(self) -> 'Underlay':
+            pass
+
+
+class Underlay(
+        YANGContainer,
+        metaclass=UnderlayMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay
+    """
+
+    _yang_name: Final[str] = 'underlay'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'enabled': (
+            enabled := YANGLeafMember(
+                'enabled',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'protection-type': (
+            protection_type := YANGLeafMember(
+                'protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'tunnels': (
+            tunnels := (  # YANGContainerMember(
+                UnderlayMeta.
+                Tunnels.
+                yang_container_descriptor())),
+
+        'tunnel-termination-points': (
+            tunnel_termination_points := (  # YANGContainerMember(
+                UnderlayMeta.
+                TunnelTerminationPoints.
+                yang_container_descriptor())),
+
+        'primary-path': (
+            primary_path := (  # YANGContainerMember(
+                UnderlayMeta.
+                PrimaryPath.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'backup-path': (
+            backup_path := (  # YANGListMember(
+                UnderlayMeta.
+                BackupPath.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Underlay':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py
new file mode 100644
index 000000000..e171685ed
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BackupPathMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: backup-path
+    """
+    from .path_element import PathElement
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: backup-path
+        """
+
+        def __init__(self):
+            super().__init__(BackupPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['BackupPath']:
+            pass
+
+        def __iter__(self, key) -> Iterator['BackupPath']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'BackupPath':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            pass
+
+
+class BackupPath(
+        YANGListItem,
+        metaclass=BackupPathMeta):
+    """
+    YANG list item handler.
+
+    YANG name: backup-path
+    """
+
+    _yang_name: Final[str] = 'backup-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                BackupPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'BackupPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
new file mode 100644
index 000000000..f70f6e567
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_node_hop import NumberedNodeHop
+    from .as_number import AsNumber
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .label import Label
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d149cb890
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..c5173e59b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py
new file mode 100644
index 000000000..234d5abd9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PrimaryPathMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: primary-path
+    """
+    from .path_element import PathElement
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: primary-path
+        """
+
+        def __init__(self):
+            super().__init__(PrimaryPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'PrimaryPathMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PrimaryPath':
+            pass
+
+        def __enter__(self) -> 'PrimaryPath':
+            pass
+
+
+class PrimaryPath(
+        YANGContainer,
+        metaclass=PrimaryPathMeta):
+    """
+    YANG container handler.
+
+    YANG name: primary-path
+    """
+
+    _yang_name: Final[str] = 'primary-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                PrimaryPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PrimaryPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
new file mode 100644
index 000000000..b5331befc
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_node_hop import NumberedNodeHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+    from .label import Label
+    from .numbered_link_hop import NumberedLinkHop
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0b962af7a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..1f748de94
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
new file mode 100644
index 000000000..9ddffc52b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelTerminationPointsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnel-termination-points
+        """
+
+        def __init__(self):
+            super().__init__(TunnelTerminationPoints)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelTerminationPointsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TunnelTerminationPoints':
+            pass
+
+        def __enter__(self) -> 'TunnelTerminationPoints':
+            pass
+
+
+class TunnelTerminationPoints(
+        YANGContainer,
+        metaclass=TunnelTerminationPointsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    _yang_name: Final[str] = 'tunnel-termination-points'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'source': (
+            source := YANGLeafMember(
+                'source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'destination': (
+            destination := YANGLeafMember(
+                'destination',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TunnelTerminationPoints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py
new file mode 100644
index 000000000..7de6a1597
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnels
+    """
+    from .tunnel import Tunnel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnels
+        """
+
+        def __init__(self):
+            super().__init__(Tunnels)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tunnels':
+            pass
+
+        def __enter__(self) -> 'Tunnels':
+            pass
+
+
+class Tunnels(
+        YANGContainer,
+        metaclass=TunnelsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnels
+    """
+
+    _yang_name: Final[str] = 'tunnels'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tunnel': (
+            tunnel := (  # YANGListMember(
+                TunnelsMeta.
+                Tunnel.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnels':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
new file mode 100644
index 000000000..fbf95428e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tunnel
+        """
+
+        def __init__(self):
+            super().__init__(Tunnel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tunnel']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tunnel']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tunnel':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            pass
+
+
+class Tunnel(
+        YANGListItem,
+        metaclass=TunnelMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    _yang_name: Final[str] = 'tunnel'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tunnel-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tunnel-name': (
+            tunnel_name := YANGLeafMember(
+                'tunnel-name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py
new file mode 100644
index 000000000..4c7d1b7e1
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py
@@ -0,0 +1,90 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class InformationSourceStateMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: information-source-state
+    """
+    from .topology import Topology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: information-source-state
+        """
+
+        def __init__(self):
+            super().__init__(InformationSourceState)
+
+        def __get__(self, instance, owner=None) -> (
+                'InformationSourceStateMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'InformationSourceState':
+            pass
+
+        def __enter__(self) -> 'InformationSourceState':
+            pass
+
+
+class InformationSourceState(
+        YANGContainer,
+        metaclass=InformationSourceStateMeta):
+    """
+    YANG container handler.
+
+    YANG name: information-source-state
+    """
+
+    _yang_name: Final[str] = 'information-source-state'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-instance': (
+            network_instance := YANGLeafMember(
+                'network-instance',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'credibility-preference': (
+            credibility_preference := YANGLeafMember(
+                'credibility-preference',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'logical-network-element': (
+            logical_network_element := YANGLeafMember(
+                'logical-network-element',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'topology': (
+            topology := (  # YANGContainerMember(
+                InformationSourceStateMeta.
+                Topology.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'InformationSourceState':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py
new file mode 100644
index 000000000..09a4a2ed7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TopologyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: topology
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: topology
+        """
+
+        def __init__(self):
+            super().__init__(Topology)
+
+        def __get__(self, instance, owner=None) -> (
+                'TopologyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Topology':
+            pass
+
+        def __enter__(self) -> 'Topology':
+            pass
+
+
+class Topology(
+        YANGContainer,
+        metaclass=TopologyMeta):
+    """
+    YANG container handler.
+
+    YANG name: topology
+    """
+
+    _yang_name: Final[str] = 'topology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-ref': (
+            node_ref := YANGLeafMember(
+                'node-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Topology':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py
new file mode 100644
index 000000000..631b9eddf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayTopologyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay-topology
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay-topology
+        """
+
+        def __init__(self):
+            super().__init__(UnderlayTopology)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayTopologyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnderlayTopology':
+            pass
+
+        def __enter__(self) -> 'UnderlayTopology':
+            pass
+
+
+class UnderlayTopology(
+        YANGContainer,
+        metaclass=UnderlayTopologyMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay-topology
+    """
+
+    _yang_name: Final[str] = 'underlay-topology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnderlayTopology':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py
new file mode 100644
index 000000000..bf8b0d899
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py
@@ -0,0 +1,90 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class InformationSourceStateMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: information-source-state
+    """
+    from .topology import Topology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: information-source-state
+        """
+
+        def __init__(self):
+            super().__init__(InformationSourceState)
+
+        def __get__(self, instance, owner=None) -> (
+                'InformationSourceStateMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'InformationSourceState':
+            pass
+
+        def __enter__(self) -> 'InformationSourceState':
+            pass
+
+
+class InformationSourceState(
+        YANGContainer,
+        metaclass=InformationSourceStateMeta):
+    """
+    YANG container handler.
+
+    YANG name: information-source-state
+    """
+
+    _yang_name: Final[str] = 'information-source-state'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'logical-network-element': (
+            logical_network_element := YANGLeafMember(
+                'logical-network-element',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'credibility-preference': (
+            credibility_preference := YANGLeafMember(
+                'credibility-preference',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'network-instance': (
+            network_instance := YANGLeafMember(
+                'network-instance',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'topology': (
+            topology := (  # YANGContainerMember(
+                InformationSourceStateMeta.
+                Topology.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'InformationSourceState':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py
new file mode 100644
index 000000000..09a4a2ed7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TopologyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: topology
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: topology
+        """
+
+        def __init__(self):
+            super().__init__(Topology)
+
+        def __get__(self, instance, owner=None) -> (
+                'TopologyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Topology':
+            pass
+
+        def __enter__(self) -> 'Topology':
+            pass
+
+
+class Topology(
+        YANGContainer,
+        metaclass=TopologyMeta):
+    """
+    YANG container handler.
+
+    YANG name: topology
+    """
+
+    _yang_name: Final[str] = 'topology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-ref': (
+            node_ref := YANGLeafMember(
+                'node-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Topology':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py
new file mode 100644
index 000000000..0ce936d9c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py
@@ -0,0 +1,85 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class StatisticsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: statistics
+    """
+    from .node import Node
+    from .connectivity_matrix_entry import ConnectivityMatrixEntry
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: statistics
+        """
+
+        def __init__(self):
+            super().__init__(Statistics)
+
+        def __get__(self, instance, owner=None) -> (
+                'StatisticsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Statistics':
+            pass
+
+        def __enter__(self) -> 'Statistics':
+            pass
+
+
+class Statistics(
+        YANGContainer,
+        metaclass=StatisticsMeta):
+    """
+    YANG container handler.
+
+    YANG name: statistics
+    """
+
+    _yang_name: Final[str] = 'statistics'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'discontinuity-time': (
+            discontinuity_time := YANGLeafMember(
+                'discontinuity-time',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'node': (
+            node := (  # YANGContainerMember(
+                StatisticsMeta.
+                Node.
+                yang_container_descriptor())),
+
+        'connectivity-matrix-entry': (
+            connectivity_matrix_entry := (  # YANGContainerMember(
+                StatisticsMeta.
+                ConnectivityMatrixEntry.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Statistics':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py
new file mode 100644
index 000000000..6c05c5035
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectivityMatrixEntryMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: connectivity-matrix-entry
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: connectivity-matrix-entry
+        """
+
+        def __init__(self):
+            super().__init__(ConnectivityMatrixEntry)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectivityMatrixEntryMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ConnectivityMatrixEntry':
+            pass
+
+        def __enter__(self) -> 'ConnectivityMatrixEntry':
+            pass
+
+
+class ConnectivityMatrixEntry(
+        YANGContainer,
+        metaclass=ConnectivityMatrixEntryMeta):
+    """
+    YANG container handler.
+
+    YANG name: connectivity-matrix-entry
+    """
+
+    _yang_name: Final[str] = 'connectivity-matrix-entry'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'enables': (
+            enables := YANGLeafMember(
+                'enables',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'modifies': (
+            modifies := YANGLeafMember(
+                'modifies',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'creates': (
+            creates := YANGLeafMember(
+                'creates',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disables': (
+            disables := YANGLeafMember(
+                'disables',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'deletes': (
+            deletes := YANGLeafMember(
+                'deletes',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ConnectivityMatrixEntry':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py
new file mode 100644
index 000000000..588fda1e5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NodeMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: node
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: node
+        """
+
+        def __init__(self):
+            super().__init__(Node)
+
+        def __get__(self, instance, owner=None) -> (
+                'NodeMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Node':
+            pass
+
+        def __enter__(self) -> 'Node':
+            pass
+
+
+class Node(
+        YANGContainer,
+        metaclass=NodeMeta):
+    """
+    YANG container handler.
+
+    YANG name: node
+    """
+
+    _yang_name: Final[str] = 'node'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'enables': (
+            enables := YANGLeafMember(
+                'enables',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'maintenance-clears': (
+            maintenance_clears := YANGLeafMember(
+                'maintenance-clears',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disables': (
+            disables := YANGLeafMember(
+                'disables',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'maintenance-sets': (
+            maintenance_sets := YANGLeafMember(
+                'maintenance-sets',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'modifies': (
+            modifies := YANGLeafMember(
+                'modifies',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Node':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py
new file mode 100644
index 000000000..e3cc0b3b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py
@@ -0,0 +1,103 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeNodeAttributesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-node-attributes
+    """
+    from .connectivity_matrices import ConnectivityMatrices
+    from .underlay_topology import UnderlayTopology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-node-attributes
+        """
+
+        def __init__(self):
+            super().__init__(TeNodeAttributes)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeNodeAttributesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeNodeAttributes':
+            pass
+
+        def __enter__(self) -> 'TeNodeAttributes':
+            pass
+
+
+class TeNodeAttributes(
+        YANGContainer,
+        metaclass=TeNodeAttributesMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-node-attributes
+    """
+
+    _yang_name: Final[str] = 'te-node-attributes'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'domain-id': (
+            domain_id := YANGLeafMember(
+                'domain-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'is-abstract': (
+            is_abstract := YANGLeafMember(
+                'is-abstract',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'admin-status': (
+            admin_status := YANGLeafMember(
+                'admin-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'connectivity-matrices': (
+            connectivity_matrices := (  # YANGContainerMember(
+                TeNodeAttributesMeta.
+                ConnectivityMatrices.
+                yang_container_descriptor())),
+
+        'underlay-topology': (
+            underlay_topology := (  # YANGContainerMember(
+                TeNodeAttributesMeta.
+                UnderlayTopology.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeNodeAttributes':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py
new file mode 100644
index 000000000..e6ef3a744
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py
@@ -0,0 +1,119 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectivityMatricesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: connectivity-matrices
+    """
+    from .label_restrictions import LabelRestrictions
+    from .optimizations import Optimizations
+    from .underlay import Underlay
+    from .path_properties import PathProperties
+    from .path_constraints import PathConstraints
+    from .connectivity_matrix import ConnectivityMatrix
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: connectivity-matrices
+        """
+
+        def __init__(self):
+            super().__init__(ConnectivityMatrices)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectivityMatricesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ConnectivityMatrices':
+            pass
+
+        def __enter__(self) -> 'ConnectivityMatrices':
+            pass
+
+
+class ConnectivityMatrices(
+        YANGContainer,
+        metaclass=ConnectivityMatricesMeta):
+    """
+    YANG container handler.
+
+    YANG name: connectivity-matrices
+    """
+
+    _yang_name: Final[str] = 'connectivity-matrices'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'number-of-entries': (
+            number_of_entries := YANGLeafMember(
+                'number-of-entries',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'is-allowed': (
+            is_allowed := YANGLeafMember(
+                'is-allowed',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                ConnectivityMatricesMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+
+        'optimizations': (
+            optimizations := (  # YANGContainerMember(
+                ConnectivityMatricesMeta.
+                Optimizations.
+                yang_container_descriptor())),
+
+        'underlay': (
+            underlay := (  # YANGContainerMember(
+                ConnectivityMatricesMeta.
+                Underlay.
+                yang_container_descriptor())),
+
+        'path-properties': (
+            path_properties := (  # YANGContainerMember(
+                ConnectivityMatricesMeta.
+                PathProperties.
+                yang_container_descriptor())),
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                ConnectivityMatricesMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'connectivity-matrix': (
+            connectivity_matrix := (  # YANGListMember(
+                ConnectivityMatricesMeta.
+                ConnectivityMatrix.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ConnectivityMatrices':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py
new file mode 100644
index 000000000..011e5295b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py
@@ -0,0 +1,130 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ConnectivityMatrixMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: connectivity-matrix
+    """
+    from .to import To
+    from .path_properties import PathProperties
+    from .underlay import Underlay
+    from .path_constraints import PathConstraints
+    from .from import From
+    from .optimizations import Optimizations
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: connectivity-matrix
+        """
+
+        def __init__(self):
+            super().__init__(ConnectivityMatrix)
+
+        def __get__(self, instance, owner=None) -> (
+                'ConnectivityMatrixMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['ConnectivityMatrix']:
+            pass
+
+        def __iter__(self, key) -> Iterator['ConnectivityMatrix']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'ConnectivityMatrix':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'ConnectivityMatrixMeta.yang_list_descriptor'):
+            pass
+
+
+class ConnectivityMatrix(
+        YANGListItem,
+        metaclass=ConnectivityMatrixMeta):
+    """
+    YANG list item handler.
+
+    YANG name: connectivity-matrix
+    """
+
+    _yang_name: Final[str] = 'connectivity-matrix'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'id': (
+            id := YANGLeafMember(
+                'id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'is-allowed': (
+            is_allowed := YANGLeafMember(
+                'is-allowed',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'to': (
+            to := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                To.
+                yang_container_descriptor())),
+
+        'path-properties': (
+            path_properties := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                PathProperties.
+                yang_container_descriptor())),
+
+        'underlay': (
+            underlay := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                Underlay.
+                yang_container_descriptor())),
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+
+        'from': (
+            from := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                From.
+                yang_container_descriptor())),
+
+        'optimizations': (
+            optimizations := (  # YANGContainerMember(
+                ConnectivityMatrixMeta.
+                Optimizations.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ConnectivityMatrix':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py
new file mode 100644
index 000000000..d788deceb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class FromMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: from
+    """
+    from .label_restrictions import LabelRestrictions
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: from
+        """
+
+        def __init__(self):
+            super().__init__(From)
+
+        def __get__(self, instance, owner=None) -> (
+                'FromMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'From':
+            pass
+
+        def __enter__(self) -> 'From':
+            pass
+
+
+class From(
+        YANGContainer,
+        metaclass=FromMeta):
+    """
+    YANG container handler.
+
+    YANG name: from
+    """
+
+    _yang_name: Final[str] = 'from'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tp-ref': (
+            tp_ref := YANGLeafMember(
+                'tp-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                FromMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'From':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..bc116eea3
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_end import LabelEnd
+    from .label_step import LabelStep
+    from .label_start import LabelStart
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
new file mode 100644
index 000000000..2b4686f49
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: optimizations
+    """
+    from .algorithm import Algorithm
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: optimizations
+        """
+
+        def __init__(self):
+            super().__init__(Optimizations)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Optimizations':
+            pass
+
+        def __enter__(self) -> 'Optimizations':
+            pass
+
+
+class Optimizations(
+        YANGContainer,
+        metaclass=OptimizationsMeta):
+    """
+    YANG container handler.
+
+    YANG name: optimizations
+    """
+
+    _yang_name: Final[str] = 'optimizations'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Optimizations':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'algorithm':
+                OptimizationsMeta.Algorithm(
+                    instance),
+        }
+        return instance
+
+    @property
+    def algorithm(self) -> (
+            OptimizationsMeta.Algorithm):
+        return self._yang_choices['algorithm']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
new file mode 100644
index 000000000..ba8324e25
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AlgorithmMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    from .metric import Metric
+    from .objective_function import ObjectiveFunction
+
+    class metric_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.metric_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+    class objective_function_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.objective_function_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+
+class Algorithm(YANGChoice, metaclass=AlgorithmMeta):
+    """
+    YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    _yang_name: Final[str] = 'algorithm'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'metric': (
+            metric := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                metric_case_descriptor())),
+
+        'objective-function': (
+            objective_function := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                objective_function_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
new file mode 100644
index 000000000..ba25f70a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric
+    """
+    from .tiebreakers import Tiebreakers
+    from .optimization_metric import OptimizationMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Metric':
+            pass
+
+        def __enter__(self) -> 'Metric':
+            pass
+
+
+class Metric(
+        YANGContainer,
+        metaclass=MetricMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric
+    """
+
+    _yang_name: Final[str] = 'metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'tiebreakers': (
+            tiebreakers := (  # YANGContainerMember(
+                MetricMeta.
+                Tiebreakers.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'optimization-metric': (
+            optimization_metric := (  # YANGListMember(
+                MetricMeta.
+                OptimizationMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Metric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
new file mode 100644
index 000000000..dc59c2850
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -0,0 +1,102 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+    from .explicit_route_exclude_objects import ExplicitRouteExcludeObjects
+    from .explicit_route_include_objects import ExplicitRouteIncludeObjects
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: optimization-metric
+        """
+
+        def __init__(self):
+            super().__init__(OptimizationMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['OptimizationMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['OptimizationMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'OptimizationMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class OptimizationMetric(
+        YANGListItem,
+        metaclass=OptimizationMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+
+    _yang_name: Final[str] = 'optimization-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'weight': (
+            weight := YANGLeafMember(
+                'weight',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'explicit-route-exclude-objects': (
+            explicit_route_exclude_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteExcludeObjects.
+                yang_container_descriptor())),
+
+        'explicit-route-include-objects': (
+            explicit_route_include_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteIncludeObjects.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'OptimizationMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
new file mode 100644
index 000000000..533135c80
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteExcludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+    from .route_object_exclude_object import RouteObjectExcludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-exclude-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteExcludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteExcludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+
+class ExplicitRouteExcludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteExcludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-exclude-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-exclude-object': (
+            route_object_exclude_object := (  # YANGListMember(
+                ExplicitRouteExcludeObjectsMeta.
+                RouteObjectExcludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteExcludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
new file mode 100644
index 000000000..5087d7cc0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectExcludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-exclude-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectExcludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectExcludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectExcludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectExcludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectExcludeObject(
+        YANGListItem,
+        metaclass=RouteObjectExcludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+
+    _yang_name: Final[str] = 'route-object-exclude-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectExcludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectExcludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectExcludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
new file mode 100644
index 000000000..550df288f
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -0,0 +1,203 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .label import Label
+    from .numbered_node_hop import NumberedNodeHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+    from .srlg import Srlg
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class srlg_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.srlg_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'srlg': (
+            srlg := (  # YANGChoiceCase(
+                TypeMeta.
+                srlg_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0b962af7a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
new file mode 100644
index 000000000..45158154d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+    from .srlg import Srlg
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'srlg': (
+            srlg := (  # YANGContainerMember(
+                SrlgMeta.
+                Srlg.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
new file mode 100644
index 000000000..9fcacd871
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'srlg': (
+            srlg := YANGLeafMember(
+                'srlg',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..f4c308608
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
new file mode 100644
index 000000000..80379d1e5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteIncludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+    from .route_object_include_object import RouteObjectIncludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-include-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteIncludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteIncludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+
+class ExplicitRouteIncludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteIncludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-include-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-include-object': (
+            route_object_include_object := (  # YANGListMember(
+                ExplicitRouteIncludeObjectsMeta.
+                RouteObjectIncludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteIncludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
new file mode 100644
index 000000000..eea621be3
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectIncludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-include-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectIncludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectIncludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectIncludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectIncludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectIncludeObject(
+        YANGListItem,
+        metaclass=RouteObjectIncludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+
+    _yang_name: Final[str] = 'route-object-include-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectIncludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectIncludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectIncludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
new file mode 100644
index 000000000..5c43beb22
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+    from .label import Label
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d1e221440
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..f4c308608
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
new file mode 100644
index 000000000..b4a935a13
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakersMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tiebreakers
+    """
+    from .tiebreaker import Tiebreaker
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tiebreakers
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreakers)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakersMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tiebreakers':
+            pass
+
+        def __enter__(self) -> 'Tiebreakers':
+            pass
+
+
+class Tiebreakers(
+        YANGContainer,
+        metaclass=TiebreakersMeta):
+    """
+    YANG container handler.
+
+    YANG name: tiebreakers
+    """
+
+    _yang_name: Final[str] = 'tiebreakers'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tiebreaker': (
+            tiebreaker := (  # YANGListMember(
+                TiebreakersMeta.
+                Tiebreaker.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreakers':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
new file mode 100644
index 000000000..46d26281e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakerMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tiebreaker
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreaker)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tiebreaker']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tiebreaker']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tiebreaker':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            pass
+
+
+class Tiebreaker(
+        YANGListItem,
+        metaclass=TiebreakerMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    _yang_name: Final[str] = 'tiebreaker'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tiebreaker-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tiebreaker-type': (
+            tiebreaker_type := YANGLeafMember(
+                'tiebreaker-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreaker':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
new file mode 100644
index 000000000..0154fb6cb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+    from .objective_function import ObjectiveFunction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'objective-function': (
+            objective_function := (  # YANGContainerMember(
+                ObjectiveFunctionMeta.
+                ObjectiveFunction.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
new file mode 100644
index 000000000..3fc193984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'objective-function-type': (
+            objective_function_type := YANGLeafMember(
+                'objective-function-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
new file mode 100644
index 000000000..6d49d1ebc
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
@@ -0,0 +1,137 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+    from .path_metric_bounds import PathMetricBounds
+    from .path_affinities_values import PathAffinitiesValues
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_srlgs_names import PathSrlgsNames
+    from .path_affinity_names import PathAffinityNames
+    from .te_bandwidth import TeBandwidth
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'disjointness': (
+            disjointness := YANGLeafMember(
+                'disjointness',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-protection': (
+            link_protection := YANGLeafMember(
+                'link-protection',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'signaling-type': (
+            signaling_type := YANGLeafMember(
+                'signaling-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hold-priority': (
+            hold_priority := YANGLeafMember(
+                'hold-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'setup-priority': (
+            setup_priority := YANGLeafMember(
+                'setup-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-metric-bounds': (
+            path_metric_bounds := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathMetricBounds.
+                yang_container_descriptor())),
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..cc269dd41
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
new file mode 100644
index 000000000..a27b60328
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+    from .path_metric_bound import PathMetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathMetricBounds':
+            pass
+
+        def __enter__(self) -> 'PathMetricBounds':
+            pass
+
+
+class PathMetricBounds(
+        YANGContainer,
+        metaclass=PathMetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+
+    _yang_name: Final[str] = 'path-metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric-bound': (
+            path_metric_bound := (  # YANGListMember(
+                PathMetricBoundsMeta.
+                PathMetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
new file mode 100644
index 000000000..fc5cf4902
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetricBound(
+        YANGListItem,
+        metaclass=PathMetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    _yang_name: Final[str] = 'path-metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'upper-bound': (
+            upper_bound := YANGLeafMember(
+                'upper-bound',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
new file mode 100644
index 000000000..2c27bb1ae
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
@@ -0,0 +1,107 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathPropertiesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-properties
+    """
+    from .path_affinities_values import PathAffinitiesValues
+    from .path_srlgs_names import PathSrlgsNames
+    from .path_route_objects import PathRouteObjects
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_affinity_names import PathAffinityNames
+    from .path_metric import PathMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-properties
+        """
+
+        def __init__(self):
+            super().__init__(PathProperties)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathPropertiesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathProperties':
+            pass
+
+        def __enter__(self) -> 'PathProperties':
+            pass
+
+
+class PathProperties(
+        YANGContainer,
+        metaclass=PathPropertiesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-properties
+    """
+
+    _yang_name: Final[str] = 'path-properties'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+
+        'path-route-objects': (
+            path_route_objects := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathRouteObjects.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric': (
+            path_metric := (  # YANGListMember(
+                PathPropertiesMeta.
+                PathMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathProperties':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..3f9a52e85
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
new file mode 100644
index 000000000..1bd538acf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric
+        """
+
+        def __init__(self):
+            super().__init__(PathMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetric(
+        YANGListItem,
+        metaclass=PathMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    _yang_name: Final[str] = 'path-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'accumulative-value': (
+            accumulative_value := YANGLeafMember(
+                'accumulative-value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
new file mode 100644
index 000000000..8510c6065
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-route-objects
+    """
+    from .path_route_object import PathRouteObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-route-objects
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathRouteObjects':
+            pass
+
+        def __enter__(self) -> 'PathRouteObjects':
+            pass
+
+
+class PathRouteObjects(
+        YANGContainer,
+        metaclass=PathRouteObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-route-objects
+    """
+
+    _yang_name: Final[str] = 'path-route-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-route-object': (
+            path_route_object := (  # YANGListMember(
+                PathRouteObjectsMeta.
+                PathRouteObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
new file mode 100644
index 000000000..ff6bafe2a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-route-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-route-object
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathRouteObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathRouteObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathRouteObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class PathRouteObject(
+        YANGListItem,
+        metaclass=PathRouteObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-route-object
+    """
+
+    _yang_name: Final[str] = 'path-route-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathRouteObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathRouteObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
new file mode 100644
index 000000000..38a40e453
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .label import Label
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..2b93eb52c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..8eeaf7fb4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py
new file mode 100644
index 000000000..91479267b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ToMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: to
+    """
+    from .label_restrictions import LabelRestrictions
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: to
+        """
+
+        def __init__(self):
+            super().__init__(To)
+
+        def __get__(self, instance, owner=None) -> (
+                'ToMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'To':
+            pass
+
+        def __enter__(self) -> 'To':
+            pass
+
+
+class To(
+        YANGContainer,
+        metaclass=ToMeta):
+    """
+    YANG container handler.
+
+    YANG name: to
+    """
+
+    _yang_name: Final[str] = 'to'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tp-ref': (
+            tp_ref := YANGLeafMember(
+                'tp-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                ToMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'To':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..1ccbd9098
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_start import LabelStart
+    from .label_step import LabelStep
+    from .label_end import LabelEnd
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py
new file mode 100644
index 000000000..48105002a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py
@@ -0,0 +1,105 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay
+    """
+    from .tunnels import Tunnels
+    from .tunnel_termination_points import TunnelTerminationPoints
+    from .primary_path import PrimaryPath
+    from .backup_path import BackupPath
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay
+        """
+
+        def __init__(self):
+            super().__init__(Underlay)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Underlay':
+            pass
+
+        def __enter__(self) -> 'Underlay':
+            pass
+
+
+class Underlay(
+        YANGContainer,
+        metaclass=UnderlayMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay
+    """
+
+    _yang_name: Final[str] = 'underlay'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'enabled': (
+            enabled := YANGLeafMember(
+                'enabled',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'protection-type': (
+            protection_type := YANGLeafMember(
+                'protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'tunnels': (
+            tunnels := (  # YANGContainerMember(
+                UnderlayMeta.
+                Tunnels.
+                yang_container_descriptor())),
+
+        'tunnel-termination-points': (
+            tunnel_termination_points := (  # YANGContainerMember(
+                UnderlayMeta.
+                TunnelTerminationPoints.
+                yang_container_descriptor())),
+
+        'primary-path': (
+            primary_path := (  # YANGContainerMember(
+                UnderlayMeta.
+                PrimaryPath.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'backup-path': (
+            backup_path := (  # YANGListMember(
+                UnderlayMeta.
+                BackupPath.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Underlay':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
new file mode 100644
index 000000000..e29eefa2e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BackupPathMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: backup-path
+    """
+    from .path_element import PathElement
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: backup-path
+        """
+
+        def __init__(self):
+            super().__init__(BackupPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['BackupPath']:
+            pass
+
+        def __iter__(self, key) -> Iterator['BackupPath']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'BackupPath':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            pass
+
+
+class BackupPath(
+        YANGListItem,
+        metaclass=BackupPathMeta):
+    """
+    YANG list item handler.
+
+    YANG name: backup-path
+    """
+
+    _yang_name: Final[str] = 'backup-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                BackupPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'BackupPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
new file mode 100644
index 000000000..04677ef47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .as_number import AsNumber
+    from .label import Label
+    from .numbered_node_hop import NumberedNodeHop
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..2b93eb52c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..f74d6bb05
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
new file mode 100644
index 000000000..234d5abd9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PrimaryPathMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: primary-path
+    """
+    from .path_element import PathElement
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: primary-path
+        """
+
+        def __init__(self):
+            super().__init__(PrimaryPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'PrimaryPathMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PrimaryPath':
+            pass
+
+        def __enter__(self) -> 'PrimaryPath':
+            pass
+
+
+class PrimaryPath(
+        YANGContainer,
+        metaclass=PrimaryPathMeta):
+    """
+    YANG container handler.
+
+    YANG name: primary-path
+    """
+
+    _yang_name: Final[str] = 'primary-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                PrimaryPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PrimaryPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
new file mode 100644
index 000000000..3c41d60a4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .label import Label
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d149cb890
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..8eeaf7fb4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
new file mode 100644
index 000000000..9ddffc52b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelTerminationPointsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnel-termination-points
+        """
+
+        def __init__(self):
+            super().__init__(TunnelTerminationPoints)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelTerminationPointsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TunnelTerminationPoints':
+            pass
+
+        def __enter__(self) -> 'TunnelTerminationPoints':
+            pass
+
+
+class TunnelTerminationPoints(
+        YANGContainer,
+        metaclass=TunnelTerminationPointsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    _yang_name: Final[str] = 'tunnel-termination-points'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'source': (
+            source := YANGLeafMember(
+                'source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'destination': (
+            destination := YANGLeafMember(
+                'destination',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TunnelTerminationPoints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
new file mode 100644
index 000000000..7de6a1597
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnels
+    """
+    from .tunnel import Tunnel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnels
+        """
+
+        def __init__(self):
+            super().__init__(Tunnels)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tunnels':
+            pass
+
+        def __enter__(self) -> 'Tunnels':
+            pass
+
+
+class Tunnels(
+        YANGContainer,
+        metaclass=TunnelsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnels
+    """
+
+    _yang_name: Final[str] = 'tunnels'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tunnel': (
+            tunnel := (  # YANGListMember(
+                TunnelsMeta.
+                Tunnel.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnels':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
new file mode 100644
index 000000000..688794184
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tunnel
+        """
+
+        def __init__(self):
+            super().__init__(Tunnel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tunnel']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tunnel']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tunnel':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            pass
+
+
+class Tunnel(
+        YANGListItem,
+        metaclass=TunnelMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    _yang_name: Final[str] = 'tunnel'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tunnel-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'tunnel-name': (
+            tunnel_name := YANGLeafMember(
+                'tunnel-name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..d095f70e7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_end import LabelEnd
+    from .label_start import LabelStart
+    from .label_step import LabelStep
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py
new file mode 100644
index 000000000..2b4686f49
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: optimizations
+    """
+    from .algorithm import Algorithm
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: optimizations
+        """
+
+        def __init__(self):
+            super().__init__(Optimizations)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Optimizations':
+            pass
+
+        def __enter__(self) -> 'Optimizations':
+            pass
+
+
+class Optimizations(
+        YANGContainer,
+        metaclass=OptimizationsMeta):
+    """
+    YANG container handler.
+
+    YANG name: optimizations
+    """
+
+    _yang_name: Final[str] = 'optimizations'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Optimizations':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'algorithm':
+                OptimizationsMeta.Algorithm(
+                    instance),
+        }
+        return instance
+
+    @property
+    def algorithm(self) -> (
+            OptimizationsMeta.Algorithm):
+        return self._yang_choices['algorithm']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py
new file mode 100644
index 000000000..ba8324e25
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AlgorithmMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    from .metric import Metric
+    from .objective_function import ObjectiveFunction
+
+    class metric_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.metric_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+    class objective_function_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.objective_function_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+
+class Algorithm(YANGChoice, metaclass=AlgorithmMeta):
+    """
+    YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    _yang_name: Final[str] = 'algorithm'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'metric': (
+            metric := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                metric_case_descriptor())),
+
+        'objective-function': (
+            objective_function := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                objective_function_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py
new file mode 100644
index 000000000..ba25f70a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric
+    """
+    from .tiebreakers import Tiebreakers
+    from .optimization_metric import OptimizationMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Metric':
+            pass
+
+        def __enter__(self) -> 'Metric':
+            pass
+
+
+class Metric(
+        YANGContainer,
+        metaclass=MetricMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric
+    """
+
+    _yang_name: Final[str] = 'metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'tiebreakers': (
+            tiebreakers := (  # YANGContainerMember(
+                MetricMeta.
+                Tiebreakers.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'optimization-metric': (
+            optimization_metric := (  # YANGListMember(
+                MetricMeta.
+                OptimizationMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Metric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
new file mode 100644
index 000000000..f556fe180
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -0,0 +1,102 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+    from .explicit_route_exclude_objects import ExplicitRouteExcludeObjects
+    from .explicit_route_include_objects import ExplicitRouteIncludeObjects
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: optimization-metric
+        """
+
+        def __init__(self):
+            super().__init__(OptimizationMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['OptimizationMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['OptimizationMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'OptimizationMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class OptimizationMetric(
+        YANGListItem,
+        metaclass=OptimizationMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+
+    _yang_name: Final[str] = 'optimization-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'weight': (
+            weight := YANGLeafMember(
+                'weight',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'explicit-route-exclude-objects': (
+            explicit_route_exclude_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteExcludeObjects.
+                yang_container_descriptor())),
+
+        'explicit-route-include-objects': (
+            explicit_route_include_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteIncludeObjects.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'OptimizationMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
new file mode 100644
index 000000000..533135c80
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteExcludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+    from .route_object_exclude_object import RouteObjectExcludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-exclude-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteExcludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteExcludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+
+class ExplicitRouteExcludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteExcludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-exclude-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-exclude-object': (
+            route_object_exclude_object := (  # YANGListMember(
+                ExplicitRouteExcludeObjectsMeta.
+                RouteObjectExcludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteExcludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
new file mode 100644
index 000000000..5087d7cc0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectExcludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-exclude-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectExcludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectExcludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectExcludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectExcludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectExcludeObject(
+        YANGListItem,
+        metaclass=RouteObjectExcludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+
+    _yang_name: Final[str] = 'route-object-exclude-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectExcludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectExcludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectExcludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
new file mode 100644
index 000000000..16264421e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -0,0 +1,203 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_link_hop import NumberedLinkHop
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+    from .srlg import Srlg
+    from .label import Label
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class srlg_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.srlg_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'srlg': (
+            srlg := (  # YANGChoiceCase(
+                TypeMeta.
+                srlg_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d149cb890
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
new file mode 100644
index 000000000..45158154d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+    from .srlg import Srlg
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'srlg': (
+            srlg := (  # YANGContainerMember(
+                SrlgMeta.
+                Srlg.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
new file mode 100644
index 000000000..9fcacd871
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'srlg': (
+            srlg := YANGLeafMember(
+                'srlg',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..4ed2982ea
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
new file mode 100644
index 000000000..80379d1e5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteIncludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+    from .route_object_include_object import RouteObjectIncludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-include-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteIncludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteIncludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+
+class ExplicitRouteIncludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteIncludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-include-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-include-object': (
+            route_object_include_object := (  # YANGListMember(
+                ExplicitRouteIncludeObjectsMeta.
+                RouteObjectIncludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteIncludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
new file mode 100644
index 000000000..eea621be3
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectIncludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-include-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectIncludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectIncludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectIncludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectIncludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectIncludeObject(
+        YANGListItem,
+        metaclass=RouteObjectIncludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+
+    _yang_name: Final[str] = 'route-object-include-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectIncludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectIncludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectIncludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
new file mode 100644
index 000000000..65605663b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_link_hop import NumberedLinkHop
+    from .numbered_node_hop import NumberedNodeHop
+    from .as_number import AsNumber
+    from .label import Label
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d149cb890
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..82d38d9f6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
new file mode 100644
index 000000000..b4a935a13
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakersMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tiebreakers
+    """
+    from .tiebreaker import Tiebreaker
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tiebreakers
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreakers)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakersMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tiebreakers':
+            pass
+
+        def __enter__(self) -> 'Tiebreakers':
+            pass
+
+
+class Tiebreakers(
+        YANGContainer,
+        metaclass=TiebreakersMeta):
+    """
+    YANG container handler.
+
+    YANG name: tiebreakers
+    """
+
+    _yang_name: Final[str] = 'tiebreakers'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tiebreaker': (
+            tiebreaker := (  # YANGListMember(
+                TiebreakersMeta.
+                Tiebreaker.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreakers':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
new file mode 100644
index 000000000..46d26281e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakerMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tiebreaker
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreaker)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tiebreaker']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tiebreaker']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tiebreaker':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            pass
+
+
+class Tiebreaker(
+        YANGListItem,
+        metaclass=TiebreakerMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    _yang_name: Final[str] = 'tiebreaker'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tiebreaker-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tiebreaker-type': (
+            tiebreaker_type := YANGLeafMember(
+                'tiebreaker-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreaker':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
new file mode 100644
index 000000000..0154fb6cb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+    from .objective_function import ObjectiveFunction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'objective-function': (
+            objective_function := (  # YANGContainerMember(
+                ObjectiveFunctionMeta.
+                ObjectiveFunction.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
new file mode 100644
index 000000000..3fc193984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'objective-function-type': (
+            objective_function_type := YANGLeafMember(
+                'objective-function-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py
new file mode 100644
index 000000000..b768537b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py
@@ -0,0 +1,137 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+    from .path_metric_bounds import PathMetricBounds
+    from .path_affinity_names import PathAffinityNames
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_srlgs_names import PathSrlgsNames
+    from .te_bandwidth import TeBandwidth
+    from .path_affinities_values import PathAffinitiesValues
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'setup-priority': (
+            setup_priority := YANGLeafMember(
+                'setup-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disjointness': (
+            disjointness := YANGLeafMember(
+                'disjointness',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'signaling-type': (
+            signaling_type := YANGLeafMember(
+                'signaling-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hold-priority': (
+            hold_priority := YANGLeafMember(
+                'hold-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-protection': (
+            link_protection := YANGLeafMember(
+                'link-protection',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-metric-bounds': (
+            path_metric_bounds := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathMetricBounds.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..cc269dd41
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
new file mode 100644
index 000000000..a27b60328
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+    from .path_metric_bound import PathMetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathMetricBounds':
+            pass
+
+        def __enter__(self) -> 'PathMetricBounds':
+            pass
+
+
+class PathMetricBounds(
+        YANGContainer,
+        metaclass=PathMetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+
+    _yang_name: Final[str] = 'path-metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric-bound': (
+            path_metric_bound := (  # YANGListMember(
+                PathMetricBoundsMeta.
+                PathMetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
new file mode 100644
index 000000000..fc5cf4902
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetricBound(
+        YANGListItem,
+        metaclass=PathMetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    _yang_name: Final[str] = 'path-metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'upper-bound': (
+            upper_bound := YANGLeafMember(
+                'upper-bound',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py
new file mode 100644
index 000000000..5291acf02
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py
@@ -0,0 +1,107 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathPropertiesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-properties
+    """
+    from .path_affinities_values import PathAffinitiesValues
+    from .path_route_objects import PathRouteObjects
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_affinity_names import PathAffinityNames
+    from .path_srlgs_names import PathSrlgsNames
+    from .path_metric import PathMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-properties
+        """
+
+        def __init__(self):
+            super().__init__(PathProperties)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathPropertiesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathProperties':
+            pass
+
+        def __enter__(self) -> 'PathProperties':
+            pass
+
+
+class PathProperties(
+        YANGContainer,
+        metaclass=PathPropertiesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-properties
+    """
+
+    _yang_name: Final[str] = 'path-properties'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+
+        'path-route-objects': (
+            path_route_objects := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathRouteObjects.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric': (
+            path_metric := (  # YANGListMember(
+                PathPropertiesMeta.
+                PathMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathProperties':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..3f9a52e85
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py
new file mode 100644
index 000000000..af4359495
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric
+        """
+
+        def __init__(self):
+            super().__init__(PathMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetric(
+        YANGListItem,
+        metaclass=PathMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    _yang_name: Final[str] = 'path-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'accumulative-value': (
+            accumulative_value := YANGLeafMember(
+                'accumulative-value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py
new file mode 100644
index 000000000..8510c6065
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-route-objects
+    """
+    from .path_route_object import PathRouteObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-route-objects
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathRouteObjects':
+            pass
+
+        def __enter__(self) -> 'PathRouteObjects':
+            pass
+
+
+class PathRouteObjects(
+        YANGContainer,
+        metaclass=PathRouteObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-route-objects
+    """
+
+    _yang_name: Final[str] = 'path-route-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-route-object': (
+            path_route_object := (  # YANGListMember(
+                PathRouteObjectsMeta.
+                PathRouteObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
new file mode 100644
index 000000000..ff6bafe2a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-route-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-route-object
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathRouteObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathRouteObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathRouteObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class PathRouteObject(
+        YANGListItem,
+        metaclass=PathRouteObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-route-object
+    """
+
+    _yang_name: Final[str] = 'path-route-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathRouteObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathRouteObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
new file mode 100644
index 000000000..5c43beb22
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+    from .label import Label
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..112f1efd7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..522417002
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py
new file mode 100644
index 000000000..e53a6620d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py
@@ -0,0 +1,105 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay
+    """
+    from .primary_path import PrimaryPath
+    from .tunnel_termination_points import TunnelTerminationPoints
+    from .tunnels import Tunnels
+    from .backup_path import BackupPath
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay
+        """
+
+        def __init__(self):
+            super().__init__(Underlay)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Underlay':
+            pass
+
+        def __enter__(self) -> 'Underlay':
+            pass
+
+
+class Underlay(
+        YANGContainer,
+        metaclass=UnderlayMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay
+    """
+
+    _yang_name: Final[str] = 'underlay'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'enabled': (
+            enabled := YANGLeafMember(
+                'enabled',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'protection-type': (
+            protection_type := YANGLeafMember(
+                'protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'primary-path': (
+            primary_path := (  # YANGContainerMember(
+                UnderlayMeta.
+                PrimaryPath.
+                yang_container_descriptor())),
+
+        'tunnel-termination-points': (
+            tunnel_termination_points := (  # YANGContainerMember(
+                UnderlayMeta.
+                TunnelTerminationPoints.
+                yang_container_descriptor())),
+
+        'tunnels': (
+            tunnels := (  # YANGContainerMember(
+                UnderlayMeta.
+                Tunnels.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'backup-path': (
+            backup_path := (  # YANGListMember(
+                UnderlayMeta.
+                BackupPath.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Underlay':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py
new file mode 100644
index 000000000..e29eefa2e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BackupPathMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: backup-path
+    """
+    from .path_element import PathElement
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: backup-path
+        """
+
+        def __init__(self):
+            super().__init__(BackupPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['BackupPath']:
+            pass
+
+        def __iter__(self, key) -> Iterator['BackupPath']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'BackupPath':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            pass
+
+
+class BackupPath(
+        YANGListItem,
+        metaclass=BackupPathMeta):
+    """
+    YANG list item handler.
+
+    YANG name: backup-path
+    """
+
+    _yang_name: Final[str] = 'backup-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                BackupPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'BackupPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
new file mode 100644
index 000000000..f2e61b714
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .as_number import AsNumber
+    from .label import Label
+    from .numbered_node_hop import NumberedNodeHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .numbered_link_hop import NumberedLinkHop
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..112f1efd7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..74f7c3b65
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py
new file mode 100644
index 000000000..234d5abd9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PrimaryPathMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: primary-path
+    """
+    from .path_element import PathElement
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: primary-path
+        """
+
+        def __init__(self):
+            super().__init__(PrimaryPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'PrimaryPathMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PrimaryPath':
+            pass
+
+        def __enter__(self) -> 'PrimaryPath':
+            pass
+
+
+class PrimaryPath(
+        YANGContainer,
+        metaclass=PrimaryPathMeta):
+    """
+    YANG container handler.
+
+    YANG name: primary-path
+    """
+
+    _yang_name: Final[str] = 'primary-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                PrimaryPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PrimaryPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
new file mode 100644
index 000000000..dc359f022
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .label import Label
+    from .numbered_node_hop import NumberedNodeHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..2b93eb52c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..4a00a18c4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
new file mode 100644
index 000000000..9ddffc52b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelTerminationPointsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnel-termination-points
+        """
+
+        def __init__(self):
+            super().__init__(TunnelTerminationPoints)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelTerminationPointsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TunnelTerminationPoints':
+            pass
+
+        def __enter__(self) -> 'TunnelTerminationPoints':
+            pass
+
+
+class TunnelTerminationPoints(
+        YANGContainer,
+        metaclass=TunnelTerminationPointsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    _yang_name: Final[str] = 'tunnel-termination-points'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'source': (
+            source := YANGLeafMember(
+                'source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'destination': (
+            destination := YANGLeafMember(
+                'destination',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TunnelTerminationPoints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py
new file mode 100644
index 000000000..7de6a1597
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnels
+    """
+    from .tunnel import Tunnel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnels
+        """
+
+        def __init__(self):
+            super().__init__(Tunnels)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tunnels':
+            pass
+
+        def __enter__(self) -> 'Tunnels':
+            pass
+
+
+class Tunnels(
+        YANGContainer,
+        metaclass=TunnelsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnels
+    """
+
+    _yang_name: Final[str] = 'tunnels'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tunnel': (
+            tunnel := (  # YANGListMember(
+                TunnelsMeta.
+                Tunnel.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnels':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
new file mode 100644
index 000000000..fbf95428e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tunnel
+        """
+
+        def __init__(self):
+            super().__init__(Tunnel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tunnel']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tunnel']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tunnel':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            pass
+
+
+class Tunnel(
+        YANGListItem,
+        metaclass=TunnelMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    _yang_name: Final[str] = 'tunnel'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tunnel-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tunnel-name': (
+            tunnel_name := YANGLeafMember(
+                'tunnel-name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py
new file mode 100644
index 000000000..631b9eddf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayTopologyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay-topology
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay-topology
+        """
+
+        def __init__(self):
+            super().__init__(UnderlayTopology)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayTopologyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnderlayTopology':
+            pass
+
+        def __enter__(self) -> 'UnderlayTopology':
+            pass
+
+
+class UnderlayTopology(
+        YANGContainer,
+        metaclass=UnderlayTopologyMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay-topology
+    """
+
+    _yang_name: Final[str] = 'underlay-topology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnderlayTopology':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py
new file mode 100644
index 000000000..6e2c48c07
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py
@@ -0,0 +1,153 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelTerminationPointMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tunnel-termination-point
+    """
+    from .client_layer_adaptation import ClientLayerAdaptation
+    from .statistics import Statistics
+    from .local_link_connectivities import LocalLinkConnectivities
+    from .geolocation import Geolocation
+    from .supporting_tunnel_termination_point import SupportingTunnelTerminationPoint
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tunnel-termination-point
+        """
+
+        def __init__(self):
+            super().__init__(TunnelTerminationPoint)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelTerminationPointMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['TunnelTerminationPoint']:
+            pass
+
+        def __iter__(self, key) -> Iterator['TunnelTerminationPoint']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'TunnelTerminationPoint':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TunnelTerminationPointMeta.yang_list_descriptor'):
+            pass
+
+
+class TunnelTerminationPoint(
+        YANGListItem,
+        metaclass=TunnelTerminationPointMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tunnel-termination-point
+    """
+
+    _yang_name: Final[str] = 'tunnel-termination-point'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tunnel-tp-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'protection-type': (
+            protection_type := YANGLeafMember(
+                'protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'admin-status': (
+            admin_status := YANGLeafMember(
+                'admin-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'tunnel-tp-id': (
+            tunnel_tp_id := YANGLeafMember(
+                'tunnel-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'encoding': (
+            encoding := YANGLeafMember(
+                'encoding',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'switching-capability': (
+            switching_capability := YANGLeafMember(
+                'switching-capability',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'oper-status': (
+            oper_status := YANGLeafMember(
+                'oper-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'client-layer-adaptation': (
+            client_layer_adaptation := (  # YANGContainerMember(
+                TunnelTerminationPointMeta.
+                ClientLayerAdaptation.
+                yang_container_descriptor())),
+
+        'statistics': (
+            statistics := (  # YANGContainerMember(
+                TunnelTerminationPointMeta.
+                Statistics.
+                yang_container_descriptor())),
+
+        'local-link-connectivities': (
+            local_link_connectivities := (  # YANGContainerMember(
+                TunnelTerminationPointMeta.
+                LocalLinkConnectivities.
+                yang_container_descriptor())),
+
+        'geolocation': (
+            geolocation := (  # YANGContainerMember(
+                TunnelTerminationPointMeta.
+                Geolocation.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'supporting-tunnel-termination-point': (
+            supporting_tunnel_termination_point := (  # YANGListMember(
+                TunnelTerminationPointMeta.
+                SupportingTunnelTerminationPoint.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TunnelTerminationPoint':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py
new file mode 100644
index 000000000..b3b8c30c7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ClientLayerAdaptationMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: client-layer-adaptation
+    """
+    from .switching_capability import SwitchingCapability
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: client-layer-adaptation
+        """
+
+        def __init__(self):
+            super().__init__(ClientLayerAdaptation)
+
+        def __get__(self, instance, owner=None) -> (
+                'ClientLayerAdaptationMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ClientLayerAdaptation':
+            pass
+
+        def __enter__(self) -> 'ClientLayerAdaptation':
+            pass
+
+
+class ClientLayerAdaptation(
+        YANGContainer,
+        metaclass=ClientLayerAdaptationMeta):
+    """
+    YANG container handler.
+
+    YANG name: client-layer-adaptation
+    """
+
+    _yang_name: Final[str] = 'client-layer-adaptation'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'switching-capability': (
+            switching_capability := (  # YANGListMember(
+                ClientLayerAdaptationMeta.
+                SwitchingCapability.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ClientLayerAdaptation':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py
new file mode 100644
index 000000000..ec358cae0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py
@@ -0,0 +1,96 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SwitchingCapabilityMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: switching-capability
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: switching-capability
+        """
+
+        def __init__(self):
+            super().__init__(SwitchingCapability)
+
+        def __get__(self, instance, owner=None) -> (
+                'SwitchingCapabilityMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['SwitchingCapability']:
+            pass
+
+        def __iter__(self, key) -> Iterator['SwitchingCapability']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'SwitchingCapability':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'SwitchingCapabilityMeta.yang_list_descriptor'):
+            pass
+
+
+class SwitchingCapability(
+        YANGListItem,
+        metaclass=SwitchingCapabilityMeta):
+    """
+    YANG list item handler.
+
+    YANG name: switching-capability
+    """
+
+    _yang_name: Final[str] = 'switching-capability'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'switching-capability',
+        'encoding',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'switching-capability': (
+            switching_capability := YANGLeafMember(
+                'switching-capability',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'encoding': (
+            encoding := YANGLeafMember(
+                'encoding',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                SwitchingCapabilityMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SwitchingCapability':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py
new file mode 100644
index 000000000..fb545052e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GeolocationMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: geolocation
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: geolocation
+        """
+
+        def __init__(self):
+            super().__init__(Geolocation)
+
+        def __get__(self, instance, owner=None) -> (
+                'GeolocationMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Geolocation':
+            pass
+
+        def __enter__(self) -> 'Geolocation':
+            pass
+
+
+class Geolocation(
+        YANGContainer,
+        metaclass=GeolocationMeta):
+    """
+    YANG container handler.
+
+    YANG name: geolocation
+    """
+
+    _yang_name: Final[str] = 'geolocation'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'latitude': (
+            latitude := YANGLeafMember(
+                'latitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'longitude': (
+            longitude := YANGLeafMember(
+                'longitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'altitude': (
+            altitude := YANGLeafMember(
+                'altitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Geolocation':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py
new file mode 100644
index 000000000..931c32ebe
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py
@@ -0,0 +1,119 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LocalLinkConnectivitiesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: local-link-connectivities
+    """
+    from .underlay import Underlay
+    from .path_constraints import PathConstraints
+    from .path_properties import PathProperties
+    from .label_restrictions import LabelRestrictions
+    from .optimizations import Optimizations
+    from .local_link_connectivity import LocalLinkConnectivity
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: local-link-connectivities
+        """
+
+        def __init__(self):
+            super().__init__(LocalLinkConnectivities)
+
+        def __get__(self, instance, owner=None) -> (
+                'LocalLinkConnectivitiesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LocalLinkConnectivities':
+            pass
+
+        def __enter__(self) -> 'LocalLinkConnectivities':
+            pass
+
+
+class LocalLinkConnectivities(
+        YANGContainer,
+        metaclass=LocalLinkConnectivitiesMeta):
+    """
+    YANG container handler.
+
+    YANG name: local-link-connectivities
+    """
+
+    _yang_name: Final[str] = 'local-link-connectivities'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'is-allowed': (
+            is_allowed := YANGLeafMember(
+                'is-allowed',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'number-of-entries': (
+            number_of_entries := YANGLeafMember(
+                'number-of-entries',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'underlay': (
+            underlay := (  # YANGContainerMember(
+                LocalLinkConnectivitiesMeta.
+                Underlay.
+                yang_container_descriptor())),
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                LocalLinkConnectivitiesMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+
+        'path-properties': (
+            path_properties := (  # YANGContainerMember(
+                LocalLinkConnectivitiesMeta.
+                PathProperties.
+                yang_container_descriptor())),
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                LocalLinkConnectivitiesMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+
+        'optimizations': (
+            optimizations := (  # YANGContainerMember(
+                LocalLinkConnectivitiesMeta.
+                Optimizations.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'local-link-connectivity': (
+            local_link_connectivity := (  # YANGListMember(
+                LocalLinkConnectivitiesMeta.
+                LocalLinkConnectivity.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LocalLinkConnectivities':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..9a3a45d56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_end import LabelEnd
+    from .label_start import LabelStart
+    from .label_step import LabelStep
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py
new file mode 100644
index 000000000..0687a2eba
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py
@@ -0,0 +1,123 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LocalLinkConnectivityMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: local-link-connectivity
+    """
+    from .underlay import Underlay
+    from .optimizations import Optimizations
+    from .label_restrictions import LabelRestrictions
+    from .path_properties import PathProperties
+    from .path_constraints import PathConstraints
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: local-link-connectivity
+        """
+
+        def __init__(self):
+            super().__init__(LocalLinkConnectivity)
+
+        def __get__(self, instance, owner=None) -> (
+                'LocalLinkConnectivityMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LocalLinkConnectivity']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LocalLinkConnectivity']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LocalLinkConnectivity':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LocalLinkConnectivityMeta.yang_list_descriptor'):
+            pass
+
+
+class LocalLinkConnectivity(
+        YANGListItem,
+        metaclass=LocalLinkConnectivityMeta):
+    """
+    YANG list item handler.
+
+    YANG name: local-link-connectivity
+    """
+
+    _yang_name: Final[str] = 'local-link-connectivity'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'link-tp-ref',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-ref': (
+            link_tp_ref := YANGLeafMember(
+                'link-tp-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'is-allowed': (
+            is_allowed := YANGLeafMember(
+                'is-allowed',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'underlay': (
+            underlay := (  # YANGContainerMember(
+                LocalLinkConnectivityMeta.
+                Underlay.
+                yang_container_descriptor())),
+
+        'optimizations': (
+            optimizations := (  # YANGContainerMember(
+                LocalLinkConnectivityMeta.
+                Optimizations.
+                yang_container_descriptor())),
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                LocalLinkConnectivityMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+
+        'path-properties': (
+            path_properties := (  # YANGContainerMember(
+                LocalLinkConnectivityMeta.
+                PathProperties.
+                yang_container_descriptor())),
+
+        'path-constraints': (
+            path_constraints := (  # YANGContainerMember(
+                LocalLinkConnectivityMeta.
+                PathConstraints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LocalLinkConnectivity':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..2d9b171dd
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_start import LabelStart
+    from .label_end import LabelEnd
+    from .label_step import LabelStep
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py
new file mode 100644
index 000000000..2b4686f49
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: optimizations
+    """
+    from .algorithm import Algorithm
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: optimizations
+        """
+
+        def __init__(self):
+            super().__init__(Optimizations)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Optimizations':
+            pass
+
+        def __enter__(self) -> 'Optimizations':
+            pass
+
+
+class Optimizations(
+        YANGContainer,
+        metaclass=OptimizationsMeta):
+    """
+    YANG container handler.
+
+    YANG name: optimizations
+    """
+
+    _yang_name: Final[str] = 'optimizations'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Optimizations':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'algorithm':
+                OptimizationsMeta.Algorithm(
+                    instance),
+        }
+        return instance
+
+    @property
+    def algorithm(self) -> (
+            OptimizationsMeta.Algorithm):
+        return self._yang_choices['algorithm']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py
new file mode 100644
index 000000000..d48108c45
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AlgorithmMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    from .objective_function import ObjectiveFunction
+    from .metric import Metric
+
+    class objective_function_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.objective_function_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+    class metric_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.metric_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+
+class Algorithm(YANGChoice, metaclass=AlgorithmMeta):
+    """
+    YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    _yang_name: Final[str] = 'algorithm'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'objective-function': (
+            objective_function := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                objective_function_case_descriptor())),
+
+        'metric': (
+            metric := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                metric_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py
new file mode 100644
index 000000000..ba25f70a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric
+    """
+    from .tiebreakers import Tiebreakers
+    from .optimization_metric import OptimizationMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Metric':
+            pass
+
+        def __enter__(self) -> 'Metric':
+            pass
+
+
+class Metric(
+        YANGContainer,
+        metaclass=MetricMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric
+    """
+
+    _yang_name: Final[str] = 'metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'tiebreakers': (
+            tiebreakers := (  # YANGContainerMember(
+                MetricMeta.
+                Tiebreakers.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'optimization-metric': (
+            optimization_metric := (  # YANGListMember(
+                MetricMeta.
+                OptimizationMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Metric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py
new file mode 100644
index 000000000..f556fe180
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -0,0 +1,102 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+    from .explicit_route_exclude_objects import ExplicitRouteExcludeObjects
+    from .explicit_route_include_objects import ExplicitRouteIncludeObjects
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: optimization-metric
+        """
+
+        def __init__(self):
+            super().__init__(OptimizationMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['OptimizationMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['OptimizationMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'OptimizationMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class OptimizationMetric(
+        YANGListItem,
+        metaclass=OptimizationMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+
+    _yang_name: Final[str] = 'optimization-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'weight': (
+            weight := YANGLeafMember(
+                'weight',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'explicit-route-exclude-objects': (
+            explicit_route_exclude_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteExcludeObjects.
+                yang_container_descriptor())),
+
+        'explicit-route-include-objects': (
+            explicit_route_include_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteIncludeObjects.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'OptimizationMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
new file mode 100644
index 000000000..533135c80
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteExcludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+    from .route_object_exclude_object import RouteObjectExcludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-exclude-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteExcludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteExcludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+
+class ExplicitRouteExcludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteExcludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-exclude-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-exclude-object': (
+            route_object_exclude_object := (  # YANGListMember(
+                ExplicitRouteExcludeObjectsMeta.
+                RouteObjectExcludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteExcludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
new file mode 100644
index 000000000..5087d7cc0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectExcludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-exclude-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectExcludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectExcludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectExcludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectExcludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectExcludeObject(
+        YANGListItem,
+        metaclass=RouteObjectExcludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+
+    _yang_name: Final[str] = 'route-object-exclude-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectExcludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectExcludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectExcludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
new file mode 100644
index 000000000..acfedad2f
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -0,0 +1,203 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .label import Label
+    from .numbered_node_hop import NumberedNodeHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .as_number import AsNumber
+    from .srlg import Srlg
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class srlg_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.srlg_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'srlg': (
+            srlg := (  # YANGChoiceCase(
+                TypeMeta.
+                srlg_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d149cb890
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
new file mode 100644
index 000000000..45158154d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+    from .srlg import Srlg
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'srlg': (
+            srlg := (  # YANGContainerMember(
+                SrlgMeta.
+                Srlg.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
new file mode 100644
index 000000000..9fcacd871
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'srlg': (
+            srlg := YANGLeafMember(
+                'srlg',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..522417002
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
new file mode 100644
index 000000000..80379d1e5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteIncludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+    from .route_object_include_object import RouteObjectIncludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-include-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteIncludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteIncludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+
+class ExplicitRouteIncludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteIncludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-include-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-include-object': (
+            route_object_include_object := (  # YANGListMember(
+                ExplicitRouteIncludeObjectsMeta.
+                RouteObjectIncludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteIncludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
new file mode 100644
index 000000000..eea621be3
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectIncludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-include-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectIncludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectIncludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectIncludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectIncludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectIncludeObject(
+        YANGListItem,
+        metaclass=RouteObjectIncludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+
+    _yang_name: Final[str] = 'route-object-include-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectIncludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectIncludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectIncludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
new file mode 100644
index 000000000..d1d032c9b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .label import Label
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0b962af7a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..522417002
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py
new file mode 100644
index 000000000..b4a935a13
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakersMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tiebreakers
+    """
+    from .tiebreaker import Tiebreaker
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tiebreakers
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreakers)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakersMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tiebreakers':
+            pass
+
+        def __enter__(self) -> 'Tiebreakers':
+            pass
+
+
+class Tiebreakers(
+        YANGContainer,
+        metaclass=TiebreakersMeta):
+    """
+    YANG container handler.
+
+    YANG name: tiebreakers
+    """
+
+    _yang_name: Final[str] = 'tiebreakers'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tiebreaker': (
+            tiebreaker := (  # YANGListMember(
+                TiebreakersMeta.
+                Tiebreaker.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreakers':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
new file mode 100644
index 000000000..46d26281e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakerMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tiebreaker
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreaker)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tiebreaker']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tiebreaker']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tiebreaker':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            pass
+
+
+class Tiebreaker(
+        YANGListItem,
+        metaclass=TiebreakerMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    _yang_name: Final[str] = 'tiebreaker'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tiebreaker-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tiebreaker-type': (
+            tiebreaker_type := YANGLeafMember(
+                'tiebreaker-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreaker':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py
new file mode 100644
index 000000000..0154fb6cb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+    from .objective_function import ObjectiveFunction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'objective-function': (
+            objective_function := (  # YANGContainerMember(
+                ObjectiveFunctionMeta.
+                ObjectiveFunction.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py
new file mode 100644
index 000000000..3fc193984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'objective-function-type': (
+            objective_function_type := YANGLeafMember(
+                'objective-function-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py
new file mode 100644
index 000000000..58692872d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py
@@ -0,0 +1,137 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+    from .path_srlgs_names import PathSrlgsNames
+    from .path_affinities_values import PathAffinitiesValues
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_metric_bounds import PathMetricBounds
+    from .te_bandwidth import TeBandwidth
+    from .path_affinity_names import PathAffinityNames
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'setup-priority': (
+            setup_priority := YANGLeafMember(
+                'setup-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-protection': (
+            link_protection := YANGLeafMember(
+                'link-protection',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disjointness': (
+            disjointness := YANGLeafMember(
+                'disjointness',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'signaling-type': (
+            signaling_type := YANGLeafMember(
+                'signaling-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hold-priority': (
+            hold_priority := YANGLeafMember(
+                'hold-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-metric-bounds': (
+            path_metric_bounds := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathMetricBounds.
+                yang_container_descriptor())),
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..cc269dd41
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py
new file mode 100644
index 000000000..a27b60328
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+    from .path_metric_bound import PathMetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathMetricBounds':
+            pass
+
+        def __enter__(self) -> 'PathMetricBounds':
+            pass
+
+
+class PathMetricBounds(
+        YANGContainer,
+        metaclass=PathMetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+
+    _yang_name: Final[str] = 'path-metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric-bound': (
+            path_metric_bound := (  # YANGListMember(
+                PathMetricBoundsMeta.
+                PathMetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
new file mode 100644
index 000000000..27ce8642a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetricBound(
+        YANGListItem,
+        metaclass=PathMetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    _yang_name: Final[str] = 'path-metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'upper-bound': (
+            upper_bound := YANGLeafMember(
+                'upper-bound',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py
new file mode 100644
index 000000000..51e92548f
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py
@@ -0,0 +1,107 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathPropertiesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-properties
+    """
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_srlgs_names import PathSrlgsNames
+    from .path_affinities_values import PathAffinitiesValues
+    from .path_affinity_names import PathAffinityNames
+    from .path_route_objects import PathRouteObjects
+    from .path_metric import PathMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-properties
+        """
+
+        def __init__(self):
+            super().__init__(PathProperties)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathPropertiesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathProperties':
+            pass
+
+        def __enter__(self) -> 'PathProperties':
+            pass
+
+
+class PathProperties(
+        YANGContainer,
+        metaclass=PathPropertiesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-properties
+    """
+
+    _yang_name: Final[str] = 'path-properties'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+
+        'path-route-objects': (
+            path_route_objects := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathRouteObjects.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric': (
+            path_metric := (  # YANGListMember(
+                PathPropertiesMeta.
+                PathMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathProperties':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..cc269dd41
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py
new file mode 100644
index 000000000..af4359495
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric
+        """
+
+        def __init__(self):
+            super().__init__(PathMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetric(
+        YANGListItem,
+        metaclass=PathMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    _yang_name: Final[str] = 'path-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'accumulative-value': (
+            accumulative_value := YANGLeafMember(
+                'accumulative-value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py
new file mode 100644
index 000000000..8510c6065
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-route-objects
+    """
+    from .path_route_object import PathRouteObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-route-objects
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathRouteObjects':
+            pass
+
+        def __enter__(self) -> 'PathRouteObjects':
+            pass
+
+
+class PathRouteObjects(
+        YANGContainer,
+        metaclass=PathRouteObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-route-objects
+    """
+
+    _yang_name: Final[str] = 'path-route-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-route-object': (
+            path_route_object := (  # YANGListMember(
+                PathRouteObjectsMeta.
+                PathRouteObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py
new file mode 100644
index 000000000..ff6bafe2a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-route-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-route-object
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathRouteObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathRouteObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathRouteObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class PathRouteObject(
+        YANGListItem,
+        metaclass=PathRouteObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-route-object
+    """
+
+    _yang_name: Final[str] = 'path-route-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathRouteObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathRouteObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py
new file mode 100644
index 000000000..3b9014c93
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .label import Label
+    from .numbered_link_hop import NumberedLinkHop
+    from .numbered_node_hop import NumberedNodeHop
+    from .as_number import AsNumber
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..112f1efd7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..f4c308608
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py
new file mode 100644
index 000000000..c32671f5a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py
@@ -0,0 +1,105 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay
+    """
+    from .tunnels import Tunnels
+    from .primary_path import PrimaryPath
+    from .tunnel_termination_points import TunnelTerminationPoints
+    from .backup_path import BackupPath
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay
+        """
+
+        def __init__(self):
+            super().__init__(Underlay)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Underlay':
+            pass
+
+        def __enter__(self) -> 'Underlay':
+            pass
+
+
+class Underlay(
+        YANGContainer,
+        metaclass=UnderlayMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay
+    """
+
+    _yang_name: Final[str] = 'underlay'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'protection-type': (
+            protection_type := YANGLeafMember(
+                'protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'enabled': (
+            enabled := YANGLeafMember(
+                'enabled',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'tunnels': (
+            tunnels := (  # YANGContainerMember(
+                UnderlayMeta.
+                Tunnels.
+                yang_container_descriptor())),
+
+        'primary-path': (
+            primary_path := (  # YANGContainerMember(
+                UnderlayMeta.
+                PrimaryPath.
+                yang_container_descriptor())),
+
+        'tunnel-termination-points': (
+            tunnel_termination_points := (  # YANGContainerMember(
+                UnderlayMeta.
+                TunnelTerminationPoints.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'backup-path': (
+            backup_path := (  # YANGListMember(
+                UnderlayMeta.
+                BackupPath.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Underlay':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py
new file mode 100644
index 000000000..e29eefa2e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BackupPathMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: backup-path
+    """
+    from .path_element import PathElement
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: backup-path
+        """
+
+        def __init__(self):
+            super().__init__(BackupPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['BackupPath']:
+            pass
+
+        def __iter__(self, key) -> Iterator['BackupPath']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'BackupPath':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            pass
+
+
+class BackupPath(
+        YANGListItem,
+        metaclass=BackupPathMeta):
+    """
+    YANG list item handler.
+
+    YANG name: backup-path
+    """
+
+    _yang_name: Final[str] = 'backup-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                BackupPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'BackupPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py
new file mode 100644
index 000000000..b5331befc
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_node_hop import NumberedNodeHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+    from .label import Label
+    from .numbered_link_hop import NumberedLinkHop
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d1e221440
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..819d8bf2a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py
new file mode 100644
index 000000000..234d5abd9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PrimaryPathMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: primary-path
+    """
+    from .path_element import PathElement
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: primary-path
+        """
+
+        def __init__(self):
+            super().__init__(PrimaryPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'PrimaryPathMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PrimaryPath':
+            pass
+
+        def __enter__(self) -> 'PrimaryPath':
+            pass
+
+
+class PrimaryPath(
+        YANGContainer,
+        metaclass=PrimaryPathMeta):
+    """
+    YANG container handler.
+
+    YANG name: primary-path
+    """
+
+    _yang_name: Final[str] = 'primary-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                PrimaryPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PrimaryPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py
new file mode 100644
index 000000000..e523b1f45
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_node_hop import NumberedNodeHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .label import Label
+    from .numbered_link_hop import NumberedLinkHop
+    from .as_number import AsNumber
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..112f1efd7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..02ec705bb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py
new file mode 100644
index 000000000..9ddffc52b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelTerminationPointsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnel-termination-points
+        """
+
+        def __init__(self):
+            super().__init__(TunnelTerminationPoints)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelTerminationPointsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TunnelTerminationPoints':
+            pass
+
+        def __enter__(self) -> 'TunnelTerminationPoints':
+            pass
+
+
+class TunnelTerminationPoints(
+        YANGContainer,
+        metaclass=TunnelTerminationPointsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    _yang_name: Final[str] = 'tunnel-termination-points'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'source': (
+            source := YANGLeafMember(
+                'source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'destination': (
+            destination := YANGLeafMember(
+                'destination',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TunnelTerminationPoints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py
new file mode 100644
index 000000000..7de6a1597
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnels
+    """
+    from .tunnel import Tunnel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnels
+        """
+
+        def __init__(self):
+            super().__init__(Tunnels)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tunnels':
+            pass
+
+        def __enter__(self) -> 'Tunnels':
+            pass
+
+
+class Tunnels(
+        YANGContainer,
+        metaclass=TunnelsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnels
+    """
+
+    _yang_name: Final[str] = 'tunnels'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tunnel': (
+            tunnel := (  # YANGListMember(
+                TunnelsMeta.
+                Tunnel.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnels':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py
new file mode 100644
index 000000000..fbf95428e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tunnel
+        """
+
+        def __init__(self):
+            super().__init__(Tunnel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tunnel']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tunnel']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tunnel':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            pass
+
+
+class Tunnel(
+        YANGListItem,
+        metaclass=TunnelMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    _yang_name: Final[str] = 'tunnel'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tunnel-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tunnel-name': (
+            tunnel_name := YANGLeafMember(
+                'tunnel-name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py
new file mode 100644
index 000000000..2b4686f49
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: optimizations
+    """
+    from .algorithm import Algorithm
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: optimizations
+        """
+
+        def __init__(self):
+            super().__init__(Optimizations)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Optimizations':
+            pass
+
+        def __enter__(self) -> 'Optimizations':
+            pass
+
+
+class Optimizations(
+        YANGContainer,
+        metaclass=OptimizationsMeta):
+    """
+    YANG container handler.
+
+    YANG name: optimizations
+    """
+
+    _yang_name: Final[str] = 'optimizations'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Optimizations':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'algorithm':
+                OptimizationsMeta.Algorithm(
+                    instance),
+        }
+        return instance
+
+    @property
+    def algorithm(self) -> (
+            OptimizationsMeta.Algorithm):
+        return self._yang_choices['algorithm']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py
new file mode 100644
index 000000000..d48108c45
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py
@@ -0,0 +1,87 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AlgorithmMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    from .objective_function import ObjectiveFunction
+    from .metric import Metric
+
+    class objective_function_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.objective_function_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.ObjectiveFunction'):
+            pass
+
+    class metric_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(
+                AlgorithmMeta.Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'AlgorithmMeta.metric_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+        def __enter__(self) -> (
+                'AlgorithmMeta.Metric'):
+            pass
+
+
+class Algorithm(YANGChoice, metaclass=AlgorithmMeta):
+    """
+    YANG choice handler.
+
+    YANG name: algorithm
+    """
+
+    _yang_name: Final[str] = 'algorithm'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'objective-function': (
+            objective_function := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                objective_function_case_descriptor())),
+
+        'metric': (
+            metric := (  # YANGChoiceCase(
+                AlgorithmMeta.
+                metric_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py
new file mode 100644
index 000000000..ba25f70a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MetricMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: metric
+    """
+    from .tiebreakers import Tiebreakers
+    from .optimization_metric import OptimizationMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: metric
+        """
+
+        def __init__(self):
+            super().__init__(Metric)
+
+        def __get__(self, instance, owner=None) -> (
+                'MetricMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Metric':
+            pass
+
+        def __enter__(self) -> 'Metric':
+            pass
+
+
+class Metric(
+        YANGContainer,
+        metaclass=MetricMeta):
+    """
+    YANG container handler.
+
+    YANG name: metric
+    """
+
+    _yang_name: Final[str] = 'metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'tiebreakers': (
+            tiebreakers := (  # YANGContainerMember(
+                MetricMeta.
+                Tiebreakers.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'optimization-metric': (
+            optimization_metric := (  # YANGListMember(
+                MetricMeta.
+                OptimizationMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Metric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py
new file mode 100644
index 000000000..1af0255d0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -0,0 +1,102 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class OptimizationMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+    from .explicit_route_include_objects import ExplicitRouteIncludeObjects
+    from .explicit_route_exclude_objects import ExplicitRouteExcludeObjects
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: optimization-metric
+        """
+
+        def __init__(self):
+            super().__init__(OptimizationMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['OptimizationMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['OptimizationMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'OptimizationMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'OptimizationMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class OptimizationMetric(
+        YANGListItem,
+        metaclass=OptimizationMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: optimization-metric
+    """
+
+    _yang_name: Final[str] = 'optimization-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'weight': (
+            weight := YANGLeafMember(
+                'weight',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'explicit-route-include-objects': (
+            explicit_route_include_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteIncludeObjects.
+                yang_container_descriptor())),
+
+        'explicit-route-exclude-objects': (
+            explicit_route_exclude_objects := (  # YANGContainerMember(
+                OptimizationMetricMeta.
+                ExplicitRouteExcludeObjects.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'OptimizationMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
new file mode 100644
index 000000000..533135c80
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteExcludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+    from .route_object_exclude_object import RouteObjectExcludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-exclude-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteExcludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteExcludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteExcludeObjects':
+            pass
+
+
+class ExplicitRouteExcludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteExcludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-exclude-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-exclude-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-exclude-object': (
+            route_object_exclude_object := (  # YANGListMember(
+                ExplicitRouteExcludeObjectsMeta.
+                RouteObjectExcludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteExcludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
new file mode 100644
index 000000000..5087d7cc0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectExcludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-exclude-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectExcludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectExcludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectExcludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectExcludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectExcludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectExcludeObject(
+        YANGListItem,
+        metaclass=RouteObjectExcludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-exclude-object
+    """
+
+    _yang_name: Final[str] = 'route-object-exclude-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectExcludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectExcludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectExcludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
new file mode 100644
index 000000000..4921d43de
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -0,0 +1,203 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .srlg import Srlg
+    from .numbered_node_hop import NumberedNodeHop
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+    from .label import Label
+
+    class srlg_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.srlg_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Srlg'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'srlg': (
+            srlg := (  # YANGChoiceCase(
+                TypeMeta.
+                srlg_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..2b93eb52c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
new file mode 100644
index 000000000..45158154d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+    from .srlg import Srlg
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'srlg': (
+            srlg := (  # YANGContainerMember(
+                SrlgMeta.
+                Srlg.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
new file mode 100644
index 000000000..9fcacd871
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SrlgMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: srlg
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: srlg
+        """
+
+        def __init__(self):
+            super().__init__(Srlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'SrlgMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Srlg':
+            pass
+
+        def __enter__(self) -> 'Srlg':
+            pass
+
+
+class Srlg(
+        YANGContainer,
+        metaclass=SrlgMeta):
+    """
+    YANG container handler.
+
+    YANG name: srlg
+    """
+
+    _yang_name: Final[str] = 'srlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'srlg': (
+            srlg := YANGLeafMember(
+                'srlg',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Srlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..4a00a18c4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
new file mode 100644
index 000000000..80379d1e5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExplicitRouteIncludeObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+    from .route_object_include_object import RouteObjectIncludeObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: explicit-route-include-objects
+        """
+
+        def __init__(self):
+            super().__init__(ExplicitRouteIncludeObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExplicitRouteIncludeObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+        def __enter__(self) -> 'ExplicitRouteIncludeObjects':
+            pass
+
+
+class ExplicitRouteIncludeObjects(
+        YANGContainer,
+        metaclass=ExplicitRouteIncludeObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: explicit-route-include-objects
+    """
+
+    _yang_name: Final[str] = 'explicit-route-include-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'route-object-include-object': (
+            route_object_include_object := (  # YANGListMember(
+                ExplicitRouteIncludeObjectsMeta.
+                RouteObjectIncludeObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExplicitRouteIncludeObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
new file mode 100644
index 000000000..eea621be3
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class RouteObjectIncludeObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: route-object-include-object
+        """
+
+        def __init__(self):
+            super().__init__(RouteObjectIncludeObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['RouteObjectIncludeObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['RouteObjectIncludeObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'RouteObjectIncludeObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'RouteObjectIncludeObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class RouteObjectIncludeObject(
+        YANGListItem,
+        metaclass=RouteObjectIncludeObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: route-object-include-object
+    """
+
+    _yang_name: Final[str] = 'route-object-include-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'RouteObjectIncludeObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                RouteObjectIncludeObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            RouteObjectIncludeObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
new file mode 100644
index 000000000..8ed25be51
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_link_hop import NumberedLinkHop
+    from .numbered_node_hop import NumberedNodeHop
+    from .label import Label
+    from .as_number import AsNumber
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..2b93eb52c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..16577714f
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py
new file mode 100644
index 000000000..b4a935a13
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakersMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tiebreakers
+    """
+    from .tiebreaker import Tiebreaker
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tiebreakers
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreakers)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakersMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tiebreakers':
+            pass
+
+        def __enter__(self) -> 'Tiebreakers':
+            pass
+
+
+class Tiebreakers(
+        YANGContainer,
+        metaclass=TiebreakersMeta):
+    """
+    YANG container handler.
+
+    YANG name: tiebreakers
+    """
+
+    _yang_name: Final[str] = 'tiebreakers'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tiebreaker': (
+            tiebreaker := (  # YANGListMember(
+                TiebreakersMeta.
+                Tiebreaker.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreakers':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
new file mode 100644
index 000000000..46d26281e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TiebreakerMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tiebreaker
+        """
+
+        def __init__(self):
+            super().__init__(Tiebreaker)
+
+        def __get__(self, instance, owner=None) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tiebreaker']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tiebreaker']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tiebreaker':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TiebreakerMeta.yang_list_descriptor'):
+            pass
+
+
+class Tiebreaker(
+        YANGListItem,
+        metaclass=TiebreakerMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tiebreaker
+    """
+
+    _yang_name: Final[str] = 'tiebreaker'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tiebreaker-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tiebreaker-type': (
+            tiebreaker_type := YANGLeafMember(
+                'tiebreaker-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tiebreaker':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py
new file mode 100644
index 000000000..0154fb6cb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+    from .objective_function import ObjectiveFunction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'objective-function': (
+            objective_function := (  # YANGContainerMember(
+                ObjectiveFunctionMeta.
+                ObjectiveFunction.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py
new file mode 100644
index 000000000..3fc193984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ObjectiveFunctionMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: objective-function
+        """
+
+        def __init__(self):
+            super().__init__(ObjectiveFunction)
+
+        def __get__(self, instance, owner=None) -> (
+                'ObjectiveFunctionMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ObjectiveFunction':
+            pass
+
+        def __enter__(self) -> 'ObjectiveFunction':
+            pass
+
+
+class ObjectiveFunction(
+        YANGContainer,
+        metaclass=ObjectiveFunctionMeta):
+    """
+    YANG container handler.
+
+    YANG name: objective-function
+    """
+
+    _yang_name: Final[str] = 'objective-function'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'objective-function-type': (
+            objective_function_type := YANGLeafMember(
+                'objective-function-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ObjectiveFunction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py
new file mode 100644
index 000000000..dfa72c588
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py
@@ -0,0 +1,137 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathConstraintsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-constraints
+    """
+    from .path_affinities_values import PathAffinitiesValues
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_metric_bounds import PathMetricBounds
+    from .path_srlgs_names import PathSrlgsNames
+    from .path_affinity_names import PathAffinityNames
+    from .te_bandwidth import TeBandwidth
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-constraints
+        """
+
+        def __init__(self):
+            super().__init__(PathConstraints)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathConstraintsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathConstraints':
+            pass
+
+        def __enter__(self) -> 'PathConstraints':
+            pass
+
+
+class PathConstraints(
+        YANGContainer,
+        metaclass=PathConstraintsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-constraints
+    """
+
+    _yang_name: Final[str] = 'path-constraints'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hold-priority': (
+            hold_priority := YANGLeafMember(
+                'hold-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'setup-priority': (
+            setup_priority := YANGLeafMember(
+                'setup-priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'signaling-type': (
+            signaling_type := YANGLeafMember(
+                'signaling-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disjointness': (
+            disjointness := YANGLeafMember(
+                'disjointness',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-protection': (
+            link_protection := YANGLeafMember(
+                'link-protection',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-metric-bounds': (
+            path_metric_bounds := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathMetricBounds.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                PathConstraintsMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathConstraints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..3f9a52e85
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py
new file mode 100644
index 000000000..a27b60328
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+    from .path_metric_bound import PathMetricBound
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-metric-bounds
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBounds)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathMetricBounds':
+            pass
+
+        def __enter__(self) -> 'PathMetricBounds':
+            pass
+
+
+class PathMetricBounds(
+        YANGContainer,
+        metaclass=PathMetricBoundsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-metric-bounds
+    """
+
+    _yang_name: Final[str] = 'path-metric-bounds'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric-bound': (
+            path_metric_bound := (  # YANGListMember(
+                PathMetricBoundsMeta.
+                PathMetricBound.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBounds':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
new file mode 100644
index 000000000..fc5cf4902
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricBoundMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric-bound
+        """
+
+        def __init__(self):
+            super().__init__(PathMetricBound)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetricBound']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetricBound']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetricBound':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricBoundMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetricBound(
+        YANGListItem,
+        metaclass=PathMetricBoundMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric-bound
+    """
+
+    _yang_name: Final[str] = 'path-metric-bound'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'upper-bound': (
+            upper_bound := YANGLeafMember(
+                'upper-bound',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetricBound':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py
new file mode 100644
index 000000000..94ac00e0d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py
@@ -0,0 +1,107 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathPropertiesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-properties
+    """
+    from .path_route_objects import PathRouteObjects
+    from .path_affinity_names import PathAffinityNames
+    from .path_srlgs_lists import PathSrlgsLists
+    from .path_srlgs_names import PathSrlgsNames
+    from .path_affinities_values import PathAffinitiesValues
+    from .path_metric import PathMetric
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-properties
+        """
+
+        def __init__(self):
+            super().__init__(PathProperties)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathPropertiesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathProperties':
+            pass
+
+        def __enter__(self) -> 'PathProperties':
+            pass
+
+
+class PathProperties(
+        YANGContainer,
+        metaclass=PathPropertiesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-properties
+    """
+
+    _yang_name: Final[str] = 'path-properties'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'path-route-objects': (
+            path_route_objects := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathRouteObjects.
+                yang_container_descriptor())),
+
+        'path-affinity-names': (
+            path_affinity_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinityNames.
+                yang_container_descriptor())),
+
+        'path-srlgs-lists': (
+            path_srlgs_lists := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsLists.
+                yang_container_descriptor())),
+
+        'path-srlgs-names': (
+            path_srlgs_names := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathSrlgsNames.
+                yang_container_descriptor())),
+
+        'path-affinities-values': (
+            path_affinities_values := (  # YANGContainerMember(
+                PathPropertiesMeta.
+                PathAffinitiesValues.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-metric': (
+            path_metric := (  # YANGListMember(
+                PathPropertiesMeta.
+                PathMetric.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathProperties':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py
new file mode 100644
index 000000000..0364e6ebb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValuesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+    from .path_affinities_value import PathAffinitiesValue
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinities-values
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValues)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValuesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinitiesValues':
+            pass
+
+        def __enter__(self) -> 'PathAffinitiesValues':
+            pass
+
+
+class PathAffinitiesValues(
+        YANGContainer,
+        metaclass=PathAffinitiesValuesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinities-values
+    """
+
+    _yang_name: Final[str] = 'path-affinities-values'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinities-value': (
+            path_affinities_value := (  # YANGListMember(
+                PathAffinitiesValuesMeta.
+                PathAffinitiesValue.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValues':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py
new file mode 100644
index 000000000..cc269dd41
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinitiesValueMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinities-value
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinitiesValue)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinitiesValue']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinitiesValue']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinitiesValue':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinitiesValueMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinitiesValue(
+        YANGListItem,
+        metaclass=PathAffinitiesValueMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinities-value
+    """
+
+    _yang_name: Final[str] = 'path-affinities-value'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'value': (
+            value := YANGLeafMember(
+                'value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinitiesValue':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py
new file mode 100644
index 000000000..e499d5b60
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+    from .path_affinity_name import PathAffinityName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-affinity-names
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathAffinityNames':
+            pass
+
+        def __enter__(self) -> 'PathAffinityNames':
+            pass
+
+
+class PathAffinityNames(
+        YANGContainer,
+        metaclass=PathAffinityNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-affinity-names
+    """
+
+    _yang_name: Final[str] = 'path-affinity-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-affinity-name': (
+            path_affinity_name := (  # YANGListMember(
+                PathAffinityNamesMeta.
+                PathAffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py
new file mode 100644
index 000000000..65b1438eb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathAffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+    from .affinity_name import AffinityName
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(PathAffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathAffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathAffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathAffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathAffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathAffinityName(
+        YANGListItem,
+        metaclass=PathAffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-affinity-name
+    """
+
+    _yang_name: Final[str] = 'path-affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'affinity-name': (
+            affinity_name := (  # YANGListMember(
+                PathAffinityNameMeta.
+                AffinityName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathAffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
new file mode 100644
index 000000000..bdd228e56
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AffinityNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: affinity-name
+        """
+
+        def __init__(self):
+            super().__init__(AffinityName)
+
+        def __get__(self, instance, owner=None) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['AffinityName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['AffinityName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'AffinityName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'AffinityNameMeta.yang_list_descriptor'):
+            pass
+
+
+class AffinityName(
+        YANGListItem,
+        metaclass=AffinityNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: affinity-name
+    """
+
+    _yang_name: Final[str] = 'affinity-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AffinityName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py
new file mode 100644
index 000000000..1bd538acf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathMetricMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-metric
+        """
+
+        def __init__(self):
+            super().__init__(PathMetric)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathMetric']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathMetric']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathMetric':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathMetricMeta.yang_list_descriptor'):
+            pass
+
+
+class PathMetric(
+        YANGListItem,
+        metaclass=PathMetricMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-metric
+    """
+
+    _yang_name: Final[str] = 'path-metric'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'metric-type',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'metric-type': (
+            metric_type := YANGLeafMember(
+                'metric-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'accumulative-value': (
+            accumulative_value := YANGLeafMember(
+                'accumulative-value',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathMetric':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py
new file mode 100644
index 000000000..8510c6065
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-route-objects
+    """
+    from .path_route_object import PathRouteObject
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-route-objects
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObjects)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathRouteObjects':
+            pass
+
+        def __enter__(self) -> 'PathRouteObjects':
+            pass
+
+
+class PathRouteObjects(
+        YANGContainer,
+        metaclass=PathRouteObjectsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-route-objects
+    """
+
+    _yang_name: Final[str] = 'path-route-objects'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-route-object': (
+            path_route_object := (  # YANGListMember(
+                PathRouteObjectsMeta.
+                PathRouteObject.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObjects':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py
new file mode 100644
index 000000000..ff6bafe2a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathRouteObjectMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-route-object
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-route-object
+        """
+
+        def __init__(self):
+            super().__init__(PathRouteObject)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathRouteObject']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathRouteObject']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathRouteObject':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathRouteObjectMeta.yang_list_descriptor'):
+            pass
+
+
+class PathRouteObject(
+        YANGListItem,
+        metaclass=PathRouteObjectMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-route-object
+    """
+
+    _yang_name: Final[str] = 'path-route-object'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathRouteObject':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathRouteObjectMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathRouteObjectMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py
new file mode 100644
index 000000000..4be4cb23a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_node_hop import NumberedNodeHop
+    from .as_number import AsNumber
+    from .numbered_link_hop import NumberedLinkHop
+    from .label import Label
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..2b93eb52c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..2c8c537d1
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py
new file mode 100644
index 000000000..759932917
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+    from .path_srlgs_list import PathSrlgsList
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-lists
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsLists)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsLists':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsLists':
+            pass
+
+
+class PathSrlgsLists(
+        YANGContainer,
+        metaclass=PathSrlgsListsMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-lists
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-lists'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-list': (
+            path_srlgs_list := (  # YANGListMember(
+                PathSrlgsListsMeta.
+                PathSrlgsList.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsLists':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
new file mode 100644
index 000000000..bceefdd63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsListMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-list
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsList)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsList']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsList']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsList':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsListMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsList(
+        YANGListItem,
+        metaclass=PathSrlgsListMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-list
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-list'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsList':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py
new file mode 100644
index 000000000..d7b6d3b75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNamesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+    from .path_srlgs_name import PathSrlgsName
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: path-srlgs-names
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsNames)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNamesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PathSrlgsNames':
+            pass
+
+        def __enter__(self) -> 'PathSrlgsNames':
+            pass
+
+
+class PathSrlgsNames(
+        YANGContainer,
+        metaclass=PathSrlgsNamesMeta):
+    """
+    YANG container handler.
+
+    YANG name: path-srlgs-names
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-names'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-srlgs-name': (
+            path_srlgs_name := (  # YANGListMember(
+                PathSrlgsNamesMeta.
+                PathSrlgsName.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsNames':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
new file mode 100644
index 000000000..a36618302
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathSrlgsNameMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-srlgs-name
+        """
+
+        def __init__(self):
+            super().__init__(PathSrlgsName)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathSrlgsName']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathSrlgsName']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathSrlgsName':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathSrlgsNameMeta.yang_list_descriptor'):
+            pass
+
+
+class PathSrlgsName(
+        YANGListItem,
+        metaclass=PathSrlgsNameMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-srlgs-name
+    """
+
+    _yang_name: Final[str] = 'path-srlgs-name'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'usage',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'usage': (
+            usage := YANGLeafMember(
+                'usage',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathSrlgsName':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py
new file mode 100644
index 000000000..e53a6620d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py
@@ -0,0 +1,105 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay
+    """
+    from .primary_path import PrimaryPath
+    from .tunnel_termination_points import TunnelTerminationPoints
+    from .tunnels import Tunnels
+    from .backup_path import BackupPath
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay
+        """
+
+        def __init__(self):
+            super().__init__(Underlay)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Underlay':
+            pass
+
+        def __enter__(self) -> 'Underlay':
+            pass
+
+
+class Underlay(
+        YANGContainer,
+        metaclass=UnderlayMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay
+    """
+
+    _yang_name: Final[str] = 'underlay'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'enabled': (
+            enabled := YANGLeafMember(
+                'enabled',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'protection-type': (
+            protection_type := YANGLeafMember(
+                'protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'primary-path': (
+            primary_path := (  # YANGContainerMember(
+                UnderlayMeta.
+                PrimaryPath.
+                yang_container_descriptor())),
+
+        'tunnel-termination-points': (
+            tunnel_termination_points := (  # YANGContainerMember(
+                UnderlayMeta.
+                TunnelTerminationPoints.
+                yang_container_descriptor())),
+
+        'tunnels': (
+            tunnels := (  # YANGContainerMember(
+                UnderlayMeta.
+                Tunnels.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'backup-path': (
+            backup_path := (  # YANGListMember(
+                UnderlayMeta.
+                BackupPath.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Underlay':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py
new file mode 100644
index 000000000..e29eefa2e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BackupPathMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: backup-path
+    """
+    from .path_element import PathElement
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: backup-path
+        """
+
+        def __init__(self):
+            super().__init__(BackupPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['BackupPath']:
+            pass
+
+        def __iter__(self, key) -> Iterator['BackupPath']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'BackupPath':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            pass
+
+
+class BackupPath(
+        YANGListItem,
+        metaclass=BackupPathMeta):
+    """
+    YANG list item handler.
+
+    YANG name: backup-path
+    """
+
+    _yang_name: Final[str] = 'backup-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                BackupPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'BackupPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py
new file mode 100644
index 000000000..9c1d641e4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .label import Label
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+    from .numbered_node_hop import NumberedNodeHop
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..112f1efd7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..6ce8fe984
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..bb89d03ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py
new file mode 100644
index 000000000..234d5abd9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PrimaryPathMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: primary-path
+    """
+    from .path_element import PathElement
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: primary-path
+        """
+
+        def __init__(self):
+            super().__init__(PrimaryPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'PrimaryPathMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PrimaryPath':
+            pass
+
+        def __enter__(self) -> 'PrimaryPath':
+            pass
+
+
+class PrimaryPath(
+        YANGContainer,
+        metaclass=PrimaryPathMeta):
+    """
+    YANG container handler.
+
+    YANG name: primary-path
+    """
+
+    _yang_name: Final[str] = 'primary-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                PrimaryPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PrimaryPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py
new file mode 100644
index 000000000..94c37ba1c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .label import Label
+    from .numbered_node_hop import NumberedNodeHop
+    from .as_number import AsNumber
+    from .numbered_link_hop import NumberedLinkHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d1e221440
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..82d38d9f6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py
new file mode 100644
index 000000000..9ddffc52b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelTerminationPointsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnel-termination-points
+        """
+
+        def __init__(self):
+            super().__init__(TunnelTerminationPoints)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelTerminationPointsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TunnelTerminationPoints':
+            pass
+
+        def __enter__(self) -> 'TunnelTerminationPoints':
+            pass
+
+
+class TunnelTerminationPoints(
+        YANGContainer,
+        metaclass=TunnelTerminationPointsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    _yang_name: Final[str] = 'tunnel-termination-points'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'source': (
+            source := YANGLeafMember(
+                'source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'destination': (
+            destination := YANGLeafMember(
+                'destination',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TunnelTerminationPoints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py
new file mode 100644
index 000000000..7de6a1597
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnels
+    """
+    from .tunnel import Tunnel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnels
+        """
+
+        def __init__(self):
+            super().__init__(Tunnels)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tunnels':
+            pass
+
+        def __enter__(self) -> 'Tunnels':
+            pass
+
+
+class Tunnels(
+        YANGContainer,
+        metaclass=TunnelsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnels
+    """
+
+    _yang_name: Final[str] = 'tunnels'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tunnel': (
+            tunnel := (  # YANGListMember(
+                TunnelsMeta.
+                Tunnel.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnels':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py
new file mode 100644
index 000000000..688794184
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tunnel
+        """
+
+        def __init__(self):
+            super().__init__(Tunnel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tunnel']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tunnel']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tunnel':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            pass
+
+
+class Tunnel(
+        YANGListItem,
+        metaclass=TunnelMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    _yang_name: Final[str] = 'tunnel'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tunnel-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'tunnel-name': (
+            tunnel_name := YANGLeafMember(
+                'tunnel-name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py
new file mode 100644
index 000000000..b774cba14
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py
@@ -0,0 +1,85 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class StatisticsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: statistics
+    """
+    from .tunnel_termination_point import TunnelTerminationPoint
+    from .local_link_connectivity import LocalLinkConnectivity
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: statistics
+        """
+
+        def __init__(self):
+            super().__init__(Statistics)
+
+        def __get__(self, instance, owner=None) -> (
+                'StatisticsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Statistics':
+            pass
+
+        def __enter__(self) -> 'Statistics':
+            pass
+
+
+class Statistics(
+        YANGContainer,
+        metaclass=StatisticsMeta):
+    """
+    YANG container handler.
+
+    YANG name: statistics
+    """
+
+    _yang_name: Final[str] = 'statistics'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'discontinuity-time': (
+            discontinuity_time := YANGLeafMember(
+                'discontinuity-time',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'tunnel-termination-point': (
+            tunnel_termination_point := (  # YANGContainerMember(
+                StatisticsMeta.
+                TunnelTerminationPoint.
+                yang_container_descriptor())),
+
+        'local-link-connectivity': (
+            local_link_connectivity := (  # YANGContainerMember(
+                StatisticsMeta.
+                LocalLinkConnectivity.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Statistics':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py
new file mode 100644
index 000000000..c80778452
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LocalLinkConnectivityMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: local-link-connectivity
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: local-link-connectivity
+        """
+
+        def __init__(self):
+            super().__init__(LocalLinkConnectivity)
+
+        def __get__(self, instance, owner=None) -> (
+                'LocalLinkConnectivityMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LocalLinkConnectivity':
+            pass
+
+        def __enter__(self) -> 'LocalLinkConnectivity':
+            pass
+
+
+class LocalLinkConnectivity(
+        YANGContainer,
+        metaclass=LocalLinkConnectivityMeta):
+    """
+    YANG container handler.
+
+    YANG name: local-link-connectivity
+    """
+
+    _yang_name: Final[str] = 'local-link-connectivity'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'enables': (
+            enables := YANGLeafMember(
+                'enables',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'creates': (
+            creates := YANGLeafMember(
+                'creates',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'deletes': (
+            deletes := YANGLeafMember(
+                'deletes',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'modifies': (
+            modifies := YANGLeafMember(
+                'modifies',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disables': (
+            disables := YANGLeafMember(
+                'disables',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LocalLinkConnectivity':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py
new file mode 100644
index 000000000..1ab18c6ee
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py
@@ -0,0 +1,119 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelTerminationPointMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnel-termination-point
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnel-termination-point
+        """
+
+        def __init__(self):
+            super().__init__(TunnelTerminationPoint)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelTerminationPointMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TunnelTerminationPoint':
+            pass
+
+        def __enter__(self) -> 'TunnelTerminationPoint':
+            pass
+
+
+class TunnelTerminationPoint(
+        YANGContainer,
+        metaclass=TunnelTerminationPointMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnel-termination-point
+    """
+
+    _yang_name: Final[str] = 'tunnel-termination-point'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'maintenance-sets': (
+            maintenance_sets := YANGLeafMember(
+                'maintenance-sets',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'downs': (
+            downs := YANGLeafMember(
+                'downs',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'modifies': (
+            modifies := YANGLeafMember(
+                'modifies',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disables': (
+            disables := YANGLeafMember(
+                'disables',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'in-service-sets': (
+            in_service_sets := YANGLeafMember(
+                'in-service-sets',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'enables': (
+            enables := YANGLeafMember(
+                'enables',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'maintenance-clears': (
+            maintenance_clears := YANGLeafMember(
+                'maintenance-clears',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'ups': (
+            ups := YANGLeafMember(
+                'ups',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'in-service-clears': (
+            in_service_clears := YANGLeafMember(
+                'in-service-clears',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TunnelTerminationPoint':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py
new file mode 100644
index 000000000..91efbb782
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SupportingTunnelTerminationPointMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: supporting-tunnel-termination-point
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: supporting-tunnel-termination-point
+        """
+
+        def __init__(self):
+            super().__init__(SupportingTunnelTerminationPoint)
+
+        def __get__(self, instance, owner=None) -> (
+                'SupportingTunnelTerminationPointMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['SupportingTunnelTerminationPoint']:
+            pass
+
+        def __iter__(self, key) -> Iterator['SupportingTunnelTerminationPoint']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'SupportingTunnelTerminationPoint':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'SupportingTunnelTerminationPointMeta.yang_list_descriptor'):
+            pass
+
+
+class SupportingTunnelTerminationPoint(
+        YANGListItem,
+        metaclass=SupportingTunnelTerminationPointMeta):
+    """
+    YANG list item handler.
+
+    YANG name: supporting-tunnel-termination-point
+    """
+
+    _yang_name: Final[str] = 'supporting-tunnel-termination-point'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'node-ref',
+        'tunnel-tp-ref',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'tunnel-tp-ref': (
+            tunnel_tp_ref := YANGLeafMember(
+                'tunnel-tp-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-ref': (
+            node_ref := YANGLeafMember(
+                'node-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SupportingTunnelTerminationPoint':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py
new file mode 100644
index 000000000..e686a833d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py
@@ -0,0 +1,102 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TerminationPointMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: termination-point
+    """
+    from .te import Te
+    from .supporting_termination_point import SupportingTerminationPoint
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: termination-point
+        """
+
+        def __init__(self):
+            super().__init__(TerminationPoint)
+
+        def __get__(self, instance, owner=None) -> (
+                'TerminationPointMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['TerminationPoint']:
+            pass
+
+        def __iter__(self, key) -> Iterator['TerminationPoint']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'TerminationPoint':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TerminationPointMeta.yang_list_descriptor'):
+            pass
+
+
+class TerminationPoint(
+        YANGListItem,
+        metaclass=TerminationPointMeta):
+    """
+    YANG list item handler.
+
+    YANG name: termination-point
+    """
+
+    _yang_name: Final[str] = 'termination-point'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-topology'
+    _yang_module_name: Final[str] = 'ietf-network-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tp-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'te-tp-id': (
+            te_tp_id := YANGLeafMember(
+                'te-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'tp-id': (
+            tp_id := YANGLeafMember(
+                'tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te': (
+            te := (  # YANGContainerMember(
+                TerminationPointMeta.
+                Te.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'supporting-termination-point': (
+            supporting_termination_point := (  # YANGListMember(
+                TerminationPointMeta.
+                SupportingTerminationPoint.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TerminationPoint':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py
new file mode 100644
index 000000000..9420fd24e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py
@@ -0,0 +1,96 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SupportingTerminationPointMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: supporting-termination-point
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: supporting-termination-point
+        """
+
+        def __init__(self):
+            super().__init__(SupportingTerminationPoint)
+
+        def __get__(self, instance, owner=None) -> (
+                'SupportingTerminationPointMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['SupportingTerminationPoint']:
+            pass
+
+        def __iter__(self, key) -> Iterator['SupportingTerminationPoint']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'SupportingTerminationPoint':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'SupportingTerminationPointMeta.yang_list_descriptor'):
+            pass
+
+
+class SupportingTerminationPoint(
+        YANGListItem,
+        metaclass=SupportingTerminationPointMeta):
+    """
+    YANG list item handler.
+
+    YANG name: supporting-termination-point
+    """
+
+    _yang_name: Final[str] = 'supporting-termination-point'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network-topology'
+    _yang_module_name: Final[str] = 'ietf-network-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'network-ref',
+        'node-ref',
+        'tp-ref',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-ref': (
+            node_ref := YANGLeafMember(
+                'node-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+
+        'tp-ref': (
+            tp_ref := YANGLeafMember(
+                'tp-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-network-topology',
+                'ietf-network-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SupportingTerminationPoint':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py
new file mode 100644
index 000000000..49c006a63
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py
@@ -0,0 +1,103 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te
+    """
+    from .geolocation import Geolocation
+    from .interface_switching_capability import InterfaceSwitchingCapability
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te
+        """
+
+        def __init__(self):
+            super().__init__(Te)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Te':
+            pass
+
+        def __enter__(self) -> 'Te':
+            pass
+
+
+class Te(
+        YANGContainer,
+        metaclass=TeMeta):
+    """
+    YANG container handler.
+
+    YANG name: te
+    """
+
+    _yang_name: Final[str] = 'te'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'admin-status': (
+            admin_status := YANGLeafMember(
+                'admin-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'inter-domain-plug-id': (
+            inter_domain_plug_id := YANGLeafMember(
+                'inter-domain-plug-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'oper-status': (
+            oper_status := YANGLeafMember(
+                'oper-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'geolocation': (
+            geolocation := (  # YANGContainerMember(
+                TeMeta.
+                Geolocation.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'interface-switching-capability': (
+            interface_switching_capability := (  # YANGListMember(
+                TeMeta.
+                InterfaceSwitchingCapability.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Te':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py
new file mode 100644
index 000000000..fb545052e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GeolocationMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: geolocation
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: geolocation
+        """
+
+        def __init__(self):
+            super().__init__(Geolocation)
+
+        def __get__(self, instance, owner=None) -> (
+                'GeolocationMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Geolocation':
+            pass
+
+        def __enter__(self) -> 'Geolocation':
+            pass
+
+
+class Geolocation(
+        YANGContainer,
+        metaclass=GeolocationMeta):
+    """
+    YANG container handler.
+
+    YANG name: geolocation
+    """
+
+    _yang_name: Final[str] = 'geolocation'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'latitude': (
+            latitude := YANGLeafMember(
+                'latitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'longitude': (
+            longitude := YANGLeafMember(
+                'longitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'altitude': (
+            altitude := YANGLeafMember(
+                'altitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Geolocation':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py
new file mode 100644
index 000000000..1134290dc
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py
@@ -0,0 +1,96 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class InterfaceSwitchingCapabilityMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: interface-switching-capability
+    """
+    from .max_lsp_bandwidth import MaxLspBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: interface-switching-capability
+        """
+
+        def __init__(self):
+            super().__init__(InterfaceSwitchingCapability)
+
+        def __get__(self, instance, owner=None) -> (
+                'InterfaceSwitchingCapabilityMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['InterfaceSwitchingCapability']:
+            pass
+
+        def __iter__(self, key) -> Iterator['InterfaceSwitchingCapability']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'InterfaceSwitchingCapability':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'InterfaceSwitchingCapabilityMeta.yang_list_descriptor'):
+            pass
+
+
+class InterfaceSwitchingCapability(
+        YANGListItem,
+        metaclass=InterfaceSwitchingCapabilityMeta):
+    """
+    YANG list item handler.
+
+    YANG name: interface-switching-capability
+    """
+
+    _yang_name: Final[str] = 'interface-switching-capability'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'switching-capability',
+        'encoding',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'encoding': (
+            encoding := YANGLeafMember(
+                'encoding',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'switching-capability': (
+            switching_capability := YANGLeafMember(
+                'switching-capability',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'max-lsp-bandwidth': (
+            max_lsp_bandwidth := (  # YANGListMember(
+                InterfaceSwitchingCapabilityMeta.
+                MaxLspBandwidth.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'InterfaceSwitchingCapability':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py
new file mode 100644
index 000000000..f4798990c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MaxLspBandwidthMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: max-lsp-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: max-lsp-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(MaxLspBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'MaxLspBandwidthMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['MaxLspBandwidth']:
+            pass
+
+        def __iter__(self, key) -> Iterator['MaxLspBandwidth']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'MaxLspBandwidth':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'MaxLspBandwidthMeta.yang_list_descriptor'):
+            pass
+
+
+class MaxLspBandwidth(
+        YANGListItem,
+        metaclass=MaxLspBandwidthMeta):
+    """
+    YANG list item handler.
+
+    YANG name: max-lsp-bandwidth
+    """
+
+    _yang_name: Final[str] = 'max-lsp-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'priority',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'priority': (
+            priority := YANGLeafMember(
+                'priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                MaxLspBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MaxLspBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py
new file mode 100644
index 000000000..4e4733ec8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py
@@ -0,0 +1,82 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class SupportingNetworkMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: supporting-network
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: supporting-network
+        """
+
+        def __init__(self):
+            super().__init__(SupportingNetwork)
+
+        def __get__(self, instance, owner=None) -> (
+                'SupportingNetworkMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['SupportingNetwork']:
+            pass
+
+        def __iter__(self, key) -> Iterator['SupportingNetwork']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'SupportingNetwork':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'SupportingNetworkMeta.yang_list_descriptor'):
+            pass
+
+
+class SupportingNetwork(
+        YANGListItem,
+        metaclass=SupportingNetworkMeta):
+    """
+    YANG list item handler.
+
+    YANG name: supporting-network
+    """
+
+    _yang_name: Final[str] = 'supporting-network'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-network'
+    _yang_module_name: Final[str] = 'ietf-network'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'network-ref',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-network',
+                'ietf-network')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'SupportingNetwork':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/__init__.py
new file mode 100644
index 000000000..c905a103e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/__init__.py
@@ -0,0 +1,97 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te
+    """
+    from .geolocation import Geolocation
+    from .nsrlg import Nsrlg
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te
+        """
+
+        def __init__(self):
+            super().__init__(Te)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Te':
+            pass
+
+        def __enter__(self) -> 'Te':
+            pass
+
+
+class Te(
+        YANGContainer,
+        metaclass=TeMeta):
+    """
+    YANG container handler.
+
+    YANG name: te
+    """
+
+    _yang_name: Final[str] = 'te'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'preference': (
+            preference := YANGLeafMember(
+                'preference',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'optimization-criterion': (
+            optimization_criterion := YANGLeafMember(
+                'optimization-criterion',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'geolocation': (
+            geolocation := (  # YANGContainerMember(
+                TeMeta.
+                Geolocation.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'nsrlg': (
+            nsrlg := (  # YANGListMember(
+                TeMeta.
+                Nsrlg.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Te':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py
new file mode 100644
index 000000000..03acbb83b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GeolocationMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: geolocation
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: geolocation
+        """
+
+        def __init__(self):
+            super().__init__(Geolocation)
+
+        def __get__(self, instance, owner=None) -> (
+                'GeolocationMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Geolocation':
+            pass
+
+        def __enter__(self) -> 'Geolocation':
+            pass
+
+
+class Geolocation(
+        YANGContainer,
+        metaclass=GeolocationMeta):
+    """
+    YANG container handler.
+
+    YANG name: geolocation
+    """
+
+    _yang_name: Final[str] = 'geolocation'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'latitude': (
+            latitude := YANGLeafMember(
+                'latitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'altitude': (
+            altitude := YANGLeafMember(
+                'altitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'longitude': (
+            longitude := YANGLeafMember(
+                'longitude',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Geolocation':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py
new file mode 100644
index 000000000..7973bac66
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NsrlgMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: nsrlg
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: nsrlg
+        """
+
+        def __init__(self):
+            super().__init__(Nsrlg)
+
+        def __get__(self, instance, owner=None) -> (
+                'NsrlgMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Nsrlg']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Nsrlg']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Nsrlg':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'NsrlgMeta.yang_list_descriptor'):
+            pass
+
+
+class Nsrlg(
+        YANGListItem,
+        metaclass=NsrlgMeta):
+    """
+    YANG list item handler.
+
+    YANG name: nsrlg
+    """
+
+    _yang_name: Final[str] = 'nsrlg'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'id': (
+            id := YANGLeafMember(
+                'id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'disjointness': (
+            disjointness := YANGLeafMember(
+                'disjointness',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Nsrlg':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py
new file mode 100644
index 000000000..119595fb7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeTopologyIdentifierMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-topology-identifier
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-topology-identifier
+        """
+
+        def __init__(self):
+            super().__init__(TeTopologyIdentifier)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeTopologyIdentifierMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeTopologyIdentifier':
+            pass
+
+        def __enter__(self) -> 'TeTopologyIdentifier':
+            pass
+
+
+class TeTopologyIdentifier(
+        YANGContainer,
+        metaclass=TeTopologyIdentifierMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-topology-identifier
+    """
+
+    _yang_name: Final[str] = 'te-topology-identifier'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'topology-id': (
+            topology_id := YANGLeafMember(
+                'topology-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'provider-id': (
+            provider_id := YANGLeafMember(
+                'provider-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'client-id': (
+            client_id := YANGLeafMember(
+                'client-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeTopologyIdentifier':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/__init__.py
new file mode 100644
index 000000000..343166900
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te
+    """
+    from .templates import Templates
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te
+        """
+
+        def __init__(self):
+            super().__init__(Te)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Te':
+            pass
+
+        def __enter__(self) -> 'Te':
+            pass
+
+
+class Te(
+        YANGContainer,
+        metaclass=TeMeta):
+    """
+    YANG container handler.
+
+    YANG name: te
+    """
+
+    _yang_name: Final[str] = 'te'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'templates': (
+            templates := (  # YANGContainerMember(
+                TeMeta.
+                Templates.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Te':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/__init__.py
new file mode 100644
index 000000000..61c9f483b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/__init__.py
@@ -0,0 +1,79 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TemplatesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: templates
+    """
+    from .link_template import LinkTemplate
+    from .node_template import NodeTemplate
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: templates
+        """
+
+        def __init__(self):
+            super().__init__(Templates)
+
+        def __get__(self, instance, owner=None) -> (
+                'TemplatesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Templates':
+            pass
+
+        def __enter__(self) -> 'Templates':
+            pass
+
+
+class Templates(
+        YANGContainer,
+        metaclass=TemplatesMeta):
+    """
+    YANG container handler.
+
+    YANG name: templates
+    """
+
+    _yang_name: Final[str] = 'templates'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'link-template': (
+            link_template := (  # YANGListMember(
+                TemplatesMeta.
+                LinkTemplate.
+                yang_list_descriptor())),
+
+        'node-template': (
+            node_template := (  # YANGListMember(
+                TemplatesMeta.
+                NodeTemplate.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Templates':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py
new file mode 100644
index 000000000..14aa5888e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py
@@ -0,0 +1,101 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LinkTemplateMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: link-template
+    """
+    from .te_link_attributes import TeLinkAttributes
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: link-template
+        """
+
+        def __init__(self):
+            super().__init__(LinkTemplate)
+
+        def __get__(self, instance, owner=None) -> (
+                'LinkTemplateMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LinkTemplate']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LinkTemplate']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LinkTemplate':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LinkTemplateMeta.yang_list_descriptor'):
+            pass
+
+
+class LinkTemplate(
+        YANGListItem,
+        metaclass=LinkTemplateMeta):
+    """
+    YANG list item handler.
+
+    YANG name: link-template
+    """
+
+    _yang_name: Final[str] = 'link-template'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'reference-change-policy': (
+            reference_change_policy := YANGLeafMember(
+                'reference-change-policy',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'priority': (
+            priority := YANGLeafMember(
+                'priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-link-attributes': (
+            te_link_attributes := (  # YANGContainerMember(
+                LinkTemplateMeta.
+                TeLinkAttributes.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LinkTemplate':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py
new file mode 100644
index 000000000..1932ab99e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py
@@ -0,0 +1,188 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLinkAttributesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-link-attributes
+    """
+    from .external_domain import ExternalDomain
+    from .max_link_bandwidth import MaxLinkBandwidth
+    from .te_nsrlgs import TeNsrlgs
+    from .max_resv_link_bandwidth import MaxResvLinkBandwidth
+    from .label_restrictions import LabelRestrictions
+    from .underlay import Underlay
+    from .te_srlgs import TeSrlgs
+    from .interface_switching_capability import InterfaceSwitchingCapability
+    from .unreserved_bandwidth import UnreservedBandwidth
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-link-attributes
+        """
+
+        def __init__(self):
+            super().__init__(TeLinkAttributes)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLinkAttributesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLinkAttributes':
+            pass
+
+        def __enter__(self) -> 'TeLinkAttributes':
+            pass
+
+
+class TeLinkAttributes(
+        YANGContainer,
+        metaclass=TeLinkAttributesMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-link-attributes
+    """
+
+    _yang_name: Final[str] = 'te-link-attributes'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'te-delay-metric': (
+            te_delay_metric := YANGLeafMember(
+                'te-delay-metric',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'admin-status': (
+            admin_status := YANGLeafMember(
+                'admin-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'administrative-group': (
+            administrative_group := YANGLeafMember(
+                'administrative-group',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-index': (
+            link_index := YANGLeafMember(
+                'link-index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'access-type': (
+            access_type := YANGLeafMember(
+                'access-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'te-igp-metric': (
+            te_igp_metric := YANGLeafMember(
+                'te-igp-metric',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'te-default-metric': (
+            te_default_metric := YANGLeafMember(
+                'te-default-metric',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'is-abstract': (
+            is_abstract := YANGLeafMember(
+                'is-abstract',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-protection-type': (
+            link_protection_type := YANGLeafMember(
+                'link-protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'external-domain': (
+            external_domain := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                ExternalDomain.
+                yang_container_descriptor())),
+
+        'max-link-bandwidth': (
+            max_link_bandwidth := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                MaxLinkBandwidth.
+                yang_container_descriptor())),
+
+        'te-nsrlgs': (
+            te_nsrlgs := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                TeNsrlgs.
+                yang_container_descriptor())),
+
+        'max-resv-link-bandwidth': (
+            max_resv_link_bandwidth := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                MaxResvLinkBandwidth.
+                yang_container_descriptor())),
+
+        'label-restrictions': (
+            label_restrictions := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                LabelRestrictions.
+                yang_container_descriptor())),
+
+        'underlay': (
+            underlay := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                Underlay.
+                yang_container_descriptor())),
+
+        'te-srlgs': (
+            te_srlgs := (  # YANGContainerMember(
+                TeLinkAttributesMeta.
+                TeSrlgs.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'interface-switching-capability': (
+            interface_switching_capability := (  # YANGListMember(
+                TeLinkAttributesMeta.
+                InterfaceSwitchingCapability.
+                yang_list_descriptor())),
+
+        'unreserved-bandwidth': (
+            unreserved_bandwidth := (  # YANGListMember(
+                TeLinkAttributesMeta.
+                UnreservedBandwidth.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLinkAttributes':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py
new file mode 100644
index 000000000..e3ff334dd
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class ExternalDomainMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: external-domain
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: external-domain
+        """
+
+        def __init__(self):
+            super().__init__(ExternalDomain)
+
+        def __get__(self, instance, owner=None) -> (
+                'ExternalDomainMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'ExternalDomain':
+            pass
+
+        def __enter__(self) -> 'ExternalDomain':
+            pass
+
+
+class ExternalDomain(
+        YANGContainer,
+        metaclass=ExternalDomainMeta):
+    """
+    YANG container handler.
+
+    YANG name: external-domain
+    """
+
+    _yang_name: Final[str] = 'external-domain'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'remote-te-link-tp-id': (
+            remote_te_link_tp_id := YANGLeafMember(
+                'remote-te-link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'remote-te-node-id': (
+            remote_te_node_id := YANGLeafMember(
+                'remote-te-node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'ExternalDomain':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py
new file mode 100644
index 000000000..1134290dc
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py
@@ -0,0 +1,96 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class InterfaceSwitchingCapabilityMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: interface-switching-capability
+    """
+    from .max_lsp_bandwidth import MaxLspBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: interface-switching-capability
+        """
+
+        def __init__(self):
+            super().__init__(InterfaceSwitchingCapability)
+
+        def __get__(self, instance, owner=None) -> (
+                'InterfaceSwitchingCapabilityMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['InterfaceSwitchingCapability']:
+            pass
+
+        def __iter__(self, key) -> Iterator['InterfaceSwitchingCapability']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'InterfaceSwitchingCapability':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'InterfaceSwitchingCapabilityMeta.yang_list_descriptor'):
+            pass
+
+
+class InterfaceSwitchingCapability(
+        YANGListItem,
+        metaclass=InterfaceSwitchingCapabilityMeta):
+    """
+    YANG list item handler.
+
+    YANG name: interface-switching-capability
+    """
+
+    _yang_name: Final[str] = 'interface-switching-capability'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'switching-capability',
+        'encoding',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'encoding': (
+            encoding := YANGLeafMember(
+                'encoding',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'switching-capability': (
+            switching_capability := YANGLeafMember(
+                'switching-capability',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'max-lsp-bandwidth': (
+            max_lsp_bandwidth := (  # YANGListMember(
+                InterfaceSwitchingCapabilityMeta.
+                MaxLspBandwidth.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'InterfaceSwitchingCapability':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
new file mode 100644
index 000000000..f4798990c
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MaxLspBandwidthMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: max-lsp-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: max-lsp-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(MaxLspBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'MaxLspBandwidthMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['MaxLspBandwidth']:
+            pass
+
+        def __iter__(self, key) -> Iterator['MaxLspBandwidth']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'MaxLspBandwidth':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'MaxLspBandwidthMeta.yang_list_descriptor'):
+            pass
+
+
+class MaxLspBandwidth(
+        YANGListItem,
+        metaclass=MaxLspBandwidthMeta):
+    """
+    YANG list item handler.
+
+    YANG name: max-lsp-bandwidth
+    """
+
+    _yang_name: Final[str] = 'max-lsp-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'priority',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'priority': (
+            priority := YANGLeafMember(
+                'priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                MaxLspBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MaxLspBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py
new file mode 100644
index 000000000..ff5da78ac
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-restrictions
+    """
+    from .label_restriction import LabelRestriction
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-restrictions
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestrictions)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelRestrictions':
+            pass
+
+        def __enter__(self) -> 'LabelRestrictions':
+            pass
+
+
+class LabelRestrictions(
+        YANGContainer,
+        metaclass=LabelRestrictionsMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-restrictions
+    """
+
+    _yang_name: Final[str] = 'label-restrictions'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'label-restriction': (
+            label_restriction := (  # YANGListMember(
+                LabelRestrictionsMeta.
+                LabelRestriction.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestrictions':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py
new file mode 100644
index 000000000..bb7e00b35
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py
@@ -0,0 +1,115 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelRestrictionMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: label-restriction
+    """
+    from .label_end import LabelEnd
+    from .label_start import LabelStart
+    from .label_step import LabelStep
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: label-restriction
+        """
+
+        def __init__(self):
+            super().__init__(LabelRestriction)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['LabelRestriction']:
+            pass
+
+        def __iter__(self, key) -> Iterator['LabelRestriction']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'LabelRestriction':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'LabelRestrictionMeta.yang_list_descriptor'):
+            pass
+
+
+class LabelRestriction(
+        YANGListItem,
+        metaclass=LabelRestrictionMeta):
+    """
+    YANG list item handler.
+
+    YANG name: label-restriction
+    """
+
+    _yang_name: Final[str] = 'label-restriction'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'range-bitmap': (
+            range_bitmap := YANGLeafMember(
+                'range-bitmap',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'restriction': (
+            restriction := YANGLeafMember(
+                'restriction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-end': (
+            label_end := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelEnd.
+                yang_container_descriptor())),
+
+        'label-start': (
+            label_start := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStart.
+                yang_container_descriptor())),
+
+        'label-step': (
+            label_step := (  # YANGContainerMember(
+                LabelRestrictionMeta.
+                LabelStep.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelRestriction':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
new file mode 100644
index 000000000..3bcaef67b
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelEndMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-end
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-end
+        """
+
+        def __init__(self):
+            super().__init__(LabelEnd)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelEndMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelEnd':
+            pass
+
+        def __enter__(self) -> 'LabelEnd':
+            pass
+
+
+class LabelEnd(
+        YANGContainer,
+        metaclass=LabelEndMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-end
+    """
+
+    _yang_name: Final[str] = 'label-end'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelEndMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelEnd':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
new file mode 100644
index 000000000..7231b41a8
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStartMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-start
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-start
+        """
+
+        def __init__(self):
+            super().__init__(LabelStart)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStartMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStart':
+            pass
+
+        def __enter__(self) -> 'LabelStart':
+            pass
+
+
+class LabelStart(
+        YANGContainer,
+        metaclass=LabelStartMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-start
+    """
+
+    _yang_name: Final[str] = 'label-start'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelStartMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStart':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
new file mode 100644
index 000000000..41684bce0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelStepMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-step
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-step
+        """
+
+        def __init__(self):
+            super().__init__(LabelStep)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelStepMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelStep':
+            pass
+
+        def __enter__(self) -> 'LabelStep':
+            pass
+
+
+class LabelStep(
+        YANGContainer,
+        metaclass=LabelStepMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-step
+    """
+
+    _yang_name: Final[str] = 'label-step'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelStep':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                LabelStepMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            LabelStepMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py
new file mode 100644
index 000000000..c867501c5
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MaxLinkBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: max-link-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: max-link-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(MaxLinkBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'MaxLinkBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MaxLinkBandwidth':
+            pass
+
+        def __enter__(self) -> 'MaxLinkBandwidth':
+            pass
+
+
+class MaxLinkBandwidth(
+        YANGContainer,
+        metaclass=MaxLinkBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: max-link-bandwidth
+    """
+
+    _yang_name: Final[str] = 'max-link-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                MaxLinkBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MaxLinkBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py
new file mode 100644
index 000000000..7105d2e36
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class MaxResvLinkBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: max-resv-link-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: max-resv-link-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(MaxResvLinkBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'MaxResvLinkBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'MaxResvLinkBandwidth':
+            pass
+
+        def __enter__(self) -> 'MaxResvLinkBandwidth':
+            pass
+
+
+class MaxResvLinkBandwidth(
+        YANGContainer,
+        metaclass=MaxResvLinkBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: max-resv-link-bandwidth
+    """
+
+    _yang_name: Final[str] = 'max-resv-link-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                MaxResvLinkBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'MaxResvLinkBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py
new file mode 100644
index 000000000..82759cb75
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeNsrlgsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-nsrlgs
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-nsrlgs
+        """
+
+        def __init__(self):
+            super().__init__(TeNsrlgs)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeNsrlgsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeNsrlgs':
+            pass
+
+        def __enter__(self) -> 'TeNsrlgs':
+            pass
+
+
+class TeNsrlgs(
+        YANGContainer,
+        metaclass=TeNsrlgsMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-nsrlgs
+    """
+
+    _yang_name: Final[str] = 'te-nsrlgs'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeNsrlgs':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py
new file mode 100644
index 000000000..f4b20e2b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py
@@ -0,0 +1,65 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeSrlgsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-srlgs
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-srlgs
+        """
+
+        def __init__(self):
+            super().__init__(TeSrlgs)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeSrlgsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeSrlgs':
+            pass
+
+        def __enter__(self) -> 'TeSrlgs':
+            pass
+
+
+class TeSrlgs(
+        YANGContainer,
+        metaclass=TeSrlgsMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-srlgs
+    """
+
+    _yang_name: Final[str] = 'te-srlgs'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeSrlgs':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py
new file mode 100644
index 000000000..e53a6620d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py
@@ -0,0 +1,105 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay
+    """
+    from .primary_path import PrimaryPath
+    from .tunnel_termination_points import TunnelTerminationPoints
+    from .tunnels import Tunnels
+    from .backup_path import BackupPath
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay
+        """
+
+        def __init__(self):
+            super().__init__(Underlay)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Underlay':
+            pass
+
+        def __enter__(self) -> 'Underlay':
+            pass
+
+
+class Underlay(
+        YANGContainer,
+        metaclass=UnderlayMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay
+    """
+
+    _yang_name: Final[str] = 'underlay'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'enabled': (
+            enabled := YANGLeafMember(
+                'enabled',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'protection-type': (
+            protection_type := YANGLeafMember(
+                'protection-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'primary-path': (
+            primary_path := (  # YANGContainerMember(
+                UnderlayMeta.
+                PrimaryPath.
+                yang_container_descriptor())),
+
+        'tunnel-termination-points': (
+            tunnel_termination_points := (  # YANGContainerMember(
+                UnderlayMeta.
+                TunnelTerminationPoints.
+                yang_container_descriptor())),
+
+        'tunnels': (
+            tunnels := (  # YANGContainerMember(
+                UnderlayMeta.
+                Tunnels.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'backup-path': (
+            backup_path := (  # YANGListMember(
+                UnderlayMeta.
+                BackupPath.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Underlay':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py
new file mode 100644
index 000000000..e29eefa2e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py
@@ -0,0 +1,95 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class BackupPathMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: backup-path
+    """
+    from .path_element import PathElement
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: backup-path
+        """
+
+        def __init__(self):
+            super().__init__(BackupPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['BackupPath']:
+            pass
+
+        def __iter__(self, key) -> Iterator['BackupPath']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'BackupPath':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'BackupPathMeta.yang_list_descriptor'):
+            pass
+
+
+class BackupPath(
+        YANGListItem,
+        metaclass=BackupPathMeta):
+    """
+    YANG list item handler.
+
+    YANG name: backup-path
+    """
+
+    _yang_name: Final[str] = 'backup-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'index',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'index': (
+            index := YANGLeafMember(
+                'index',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                BackupPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'BackupPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
new file mode 100644
index 000000000..f2e61b714
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .as_number import AsNumber
+    from .label import Label
+    from .numbered_node_hop import NumberedNodeHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .numbered_link_hop import NumberedLinkHop
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..ac12334a0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..d149cb890
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..02ec705bb
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py
new file mode 100644
index 000000000..234d5abd9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PrimaryPathMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: primary-path
+    """
+    from .path_element import PathElement
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: primary-path
+        """
+
+        def __init__(self):
+            super().__init__(PrimaryPath)
+
+        def __get__(self, instance, owner=None) -> (
+                'PrimaryPathMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'PrimaryPath':
+            pass
+
+        def __enter__(self) -> 'PrimaryPath':
+            pass
+
+
+class PrimaryPath(
+        YANGContainer,
+        metaclass=PrimaryPathMeta):
+    """
+    YANG container handler.
+
+    YANG name: primary-path
+    """
+
+    _yang_name: Final[str] = 'primary-path'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'path-element': (
+            path_element := (  # YANGListMember(
+                PrimaryPathMeta.
+                PathElement.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PrimaryPath':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py
new file mode 100644
index 000000000..9e681fc47
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py
@@ -0,0 +1,92 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class PathElementMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: path-element
+    """
+    from .type import Type
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: path-element
+        """
+
+        def __init__(self):
+            super().__init__(PathElement)
+
+        def __get__(self, instance, owner=None) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['PathElement']:
+            pass
+
+        def __iter__(self, key) -> Iterator['PathElement']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'PathElement':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'PathElementMeta.yang_list_descriptor'):
+            pass
+
+
+class PathElement(
+        YANGListItem,
+        metaclass=PathElementMeta):
+    """
+    YANG list item handler.
+
+    YANG name: path-element
+    """
+
+    _yang_name: Final[str] = 'path-element'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'path-element-id',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'path-element-id': (
+            path_element_id := YANGLeafMember(
+                'path-element-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'PathElement':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'type':
+                PathElementMeta.Type(
+                    instance),
+        }
+        return instance
+
+    @property
+    def type(self) -> (
+            PathElementMeta.Type):
+        return self._yang_choices['type']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
new file mode 100644
index 000000000..7fd000898
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
@@ -0,0 +1,174 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TypeMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: type
+    """
+
+    from .numbered_node_hop import NumberedNodeHop
+    from .unnumbered_link_hop import UnnumberedLinkHop
+    from .as_number import AsNumber
+    from .numbered_link_hop import NumberedLinkHop
+    from .label import Label
+
+    class numbered_node_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_node_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedNodeHop'):
+            pass
+
+    class unnumbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.unnumbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.UnnumberedLinkHop'):
+            pass
+
+    class as_number_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.as_number_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.AsNumber'):
+            pass
+
+    class numbered_link_hop_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.numbered_link_hop_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.NumberedLinkHop'):
+            pass
+
+    class label_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(
+                TypeMeta.Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'TypeMeta.label_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+        def __enter__(self) -> (
+                'TypeMeta.Label'):
+            pass
+
+
+class Type(YANGChoice, metaclass=TypeMeta):
+    """
+    YANG choice handler.
+
+    YANG name: type
+    """
+
+    _yang_name: Final[str] = 'type'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_node_hop_case_descriptor())),
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                unnumbered_link_hop_case_descriptor())),
+
+        'as-number': (
+            as_number := (  # YANGChoiceCase(
+                TypeMeta.
+                as_number_case_descriptor())),
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGChoiceCase(
+                TypeMeta.
+                numbered_link_hop_case_descriptor())),
+
+        'label': (
+            label := (  # YANGChoiceCase(
+                TypeMeta.
+                label_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
new file mode 100644
index 000000000..4eaab7ed6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number
+    """
+    from .as_number_hop import AsNumberHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number
+        """
+
+        def __init__(self):
+            super().__init__(AsNumber)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumber':
+            pass
+
+        def __enter__(self) -> 'AsNumber':
+            pass
+
+
+class AsNumber(
+        YANGContainer,
+        metaclass=AsNumberMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number
+    """
+
+    _yang_name: Final[str] = 'as-number'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'as-number-hop': (
+            as_number_hop := (  # YANGContainerMember(
+                AsNumberMeta.
+                AsNumberHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumber':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
new file mode 100644
index 000000000..b5045b4a6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class AsNumberHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: as-number-hop
+        """
+
+        def __init__(self):
+            super().__init__(AsNumberHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'AsNumberHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'AsNumberHop':
+            pass
+
+        def __enter__(self) -> 'AsNumberHop':
+            pass
+
+
+class AsNumberHop(
+        YANGContainer,
+        metaclass=AsNumberHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: as-number-hop
+    """
+
+    _yang_name: Final[str] = 'as-number-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'as-number': (
+            as_number := YANGLeafMember(
+                'as-number',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'AsNumberHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
new file mode 100644
index 000000000..e9c2b15b0
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label
+    """
+    from .label_hop import LabelHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label
+        """
+
+        def __init__(self):
+            super().__init__(Label)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Label':
+            pass
+
+        def __enter__(self) -> 'Label':
+            pass
+
+
+class Label(
+        YANGContainer,
+        metaclass=LabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: label
+    """
+
+    _yang_name: Final[str] = 'label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'label-hop': (
+            label_hop := (  # YANGContainerMember(
+                LabelMeta.
+                LabelHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Label':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
new file mode 100644
index 000000000..602865e1d
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class LabelHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: label-hop
+    """
+    from .te_label import TeLabel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: label-hop
+        """
+
+        def __init__(self):
+            super().__init__(LabelHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'LabelHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'LabelHop':
+            pass
+
+        def __enter__(self) -> 'LabelHop':
+            pass
+
+
+class LabelHop(
+        YANGContainer,
+        metaclass=LabelHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: label-hop
+    """
+
+    _yang_name: Final[str] = 'label-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-label': (
+            te_label := (  # YANGContainerMember(
+                LabelHopMeta.
+                TeLabel.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'LabelHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
new file mode 100644
index 000000000..c0fc62380
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -0,0 +1,81 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeLabelMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-label
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-label
+        """
+
+        def __init__(self):
+            super().__init__(TeLabel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeLabelMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeLabel':
+            pass
+
+        def __enter__(self) -> 'TeLabel':
+            pass
+
+
+class TeLabel(
+        YANGContainer,
+        metaclass=TeLabelMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-label
+    """
+
+    _yang_name: Final[str] = 'te-label'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeLabel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeLabelMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeLabelMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..0613a055a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+    from .numbered_link_hop import NumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-link-hop': (
+            numbered_link_hop := (  # YANGContainerMember(
+                NumberedLinkHopMeta.
+                NumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
new file mode 100644
index 000000000..112f1efd7
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -0,0 +1,83 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'NumberedLinkHop':
+            pass
+
+
+class NumberedLinkHop(
+        YANGContainer,
+        metaclass=NumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..1656e10d6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+    from .numbered_node_hop import NumberedNodeHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'numbered-node-hop': (
+            numbered_node_hop := (  # YANGContainerMember(
+                NumberedNodeHopMeta.
+                NumberedNodeHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
new file mode 100644
index 000000000..94a4a11b9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NumberedNodeHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: numbered-node-hop
+        """
+
+        def __init__(self):
+            super().__init__(NumberedNodeHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'NumberedNodeHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'NumberedNodeHop':
+            pass
+
+        def __enter__(self) -> 'NumberedNodeHop':
+            pass
+
+
+class NumberedNodeHop(
+        YANGContainer,
+        metaclass=NumberedNodeHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: numbered-node-hop
+    """
+
+    _yang_name: Final[str] = 'numbered-node-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NumberedNodeHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..0e2dfd2bf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -0,0 +1,72 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+    from .unnumbered_link_hop import UnnumberedLinkHop
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'unnumbered-link-hop': (
+            unnumbered_link_hop := (  # YANGContainerMember(
+                UnnumberedLinkHopMeta.
+                UnnumberedLinkHop.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
new file mode 100644
index 000000000..4a00a18c4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnnumberedLinkHopMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: unnumbered-link-hop
+        """
+
+        def __init__(self):
+            super().__init__(UnnumberedLinkHop)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnnumberedLinkHopMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnnumberedLinkHop':
+            pass
+
+        def __enter__(self) -> 'UnnumberedLinkHop':
+            pass
+
+
+class UnnumberedLinkHop(
+        YANGContainer,
+        metaclass=UnnumberedLinkHopMeta):
+    """
+    YANG container handler.
+
+    YANG name: unnumbered-link-hop
+    """
+
+    _yang_name: Final[str] = 'unnumbered-link-hop'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'direction': (
+            direction := YANGLeafMember(
+                'direction',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'hop-type': (
+            hop_type := YANGLeafMember(
+                'hop-type',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'link-tp-id': (
+            link_tp_id := YANGLeafMember(
+                'link-tp-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'node-id': (
+            node_id := YANGLeafMember(
+                'node-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnnumberedLinkHop':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py
new file mode 100644
index 000000000..77b2be0c6
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py
@@ -0,0 +1,77 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelTerminationPointsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnel-termination-points
+        """
+
+        def __init__(self):
+            super().__init__(TunnelTerminationPoints)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelTerminationPointsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TunnelTerminationPoints':
+            pass
+
+        def __enter__(self) -> 'TunnelTerminationPoints':
+            pass
+
+
+class TunnelTerminationPoints(
+        YANGContainer,
+        metaclass=TunnelTerminationPointsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnel-termination-points
+    """
+
+    _yang_name: Final[str] = 'tunnel-termination-points'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'destination': (
+            destination := YANGLeafMember(
+                'destination',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'source': (
+            source := YANGLeafMember(
+                'source',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TunnelTerminationPoints':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py
new file mode 100644
index 000000000..7de6a1597
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py
@@ -0,0 +1,78 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelsMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: tunnels
+    """
+    from .tunnel import Tunnel
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: tunnels
+        """
+
+        def __init__(self):
+            super().__init__(Tunnels)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelsMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Tunnels':
+            pass
+
+        def __enter__(self) -> 'Tunnels':
+            pass
+
+
+class Tunnels(
+        YANGContainer,
+        metaclass=TunnelsMeta):
+    """
+    YANG container handler.
+
+    YANG name: tunnels
+    """
+
+    _yang_name: Final[str] = 'tunnels'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+
+        'tunnel': (
+            tunnel := (  # YANGListMember(
+                TunnelsMeta.
+                Tunnel.
+                yang_list_descriptor())),
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnels':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py
new file mode 100644
index 000000000..688794184
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py
@@ -0,0 +1,88 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TunnelMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: tunnel
+        """
+
+        def __init__(self):
+            super().__init__(Tunnel)
+
+        def __get__(self, instance, owner=None) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['Tunnel']:
+            pass
+
+        def __iter__(self, key) -> Iterator['Tunnel']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'Tunnel':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'TunnelMeta.yang_list_descriptor'):
+            pass
+
+
+class Tunnel(
+        YANGListItem,
+        metaclass=TunnelMeta):
+    """
+    YANG list item handler.
+
+    YANG name: tunnel
+    """
+
+    _yang_name: Final[str] = 'tunnel'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'tunnel-name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'sharing': (
+            sharing := YANGLeafMember(
+                'sharing',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'tunnel-name': (
+            tunnel_name := YANGLeafMember(
+                'tunnel-name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Tunnel':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py
new file mode 100644
index 000000000..1a56afee4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py
@@ -0,0 +1,89 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnreservedBandwidthMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: unreserved-bandwidth
+    """
+    from .te_bandwidth import TeBandwidth
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: unreserved-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(UnreservedBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnreservedBandwidthMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['UnreservedBandwidth']:
+            pass
+
+        def __iter__(self, key) -> Iterator['UnreservedBandwidth']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'UnreservedBandwidth':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'UnreservedBandwidthMeta.yang_list_descriptor'):
+            pass
+
+
+class UnreservedBandwidth(
+        YANGListItem,
+        metaclass=UnreservedBandwidthMeta):
+    """
+    YANG list item handler.
+
+    YANG name: unreserved-bandwidth
+    """
+
+    _yang_name: Final[str] = 'unreserved-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'priority',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'priority': (
+            priority := YANGLeafMember(
+                'priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-bandwidth': (
+            te_bandwidth := (  # YANGContainerMember(
+                UnreservedBandwidthMeta.
+                TeBandwidth.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnreservedBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
new file mode 100644
index 000000000..e6ca6439a
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
@@ -0,0 +1,75 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeBandwidthMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+    from .technology import Technology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-bandwidth
+        """
+
+        def __init__(self):
+            super().__init__(TeBandwidth)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeBandwidthMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeBandwidth':
+            pass
+
+        def __enter__(self) -> 'TeBandwidth':
+            pass
+
+
+class TeBandwidth(
+        YANGContainer,
+        metaclass=TeBandwidthMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-bandwidth
+    """
+
+    _yang_name: Final[str] = 'te-bandwidth'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeBandwidth':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+
+            'technology':
+                TeBandwidthMeta.Technology(
+                    instance),
+        }
+        return instance
+
+    @property
+    def technology(self) -> (
+            TeBandwidthMeta.Technology):
+        return self._yang_choices['technology']
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
new file mode 100644
index 000000000..c43a6ac16
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
@@ -0,0 +1,58 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TechnologyMeta(type):
+    """
+    Metaclass for YANG choice handler.
+
+    YANG name: technology
+    """
+
+    from .generic import Generic
+
+    class generic_case_descriptor(YANGChoiceCase):
+        """
+        YANG choice case descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(
+                TechnologyMeta.Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'TechnologyMeta.generic_case_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+        def __enter__(self) -> (
+                'TechnologyMeta.Generic'):
+            pass
+
+
+class Technology(YANGChoice, metaclass=TechnologyMeta):
+    """
+    YANG choice handler.
+
+    YANG name: technology
+    """
+
+    _yang_name: Final[str] = 'technology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_cases: Final[Dict[str, YANGChoiceCase]] = {
+
+        'generic': (
+            generic := (  # YANGChoiceCase(
+                TechnologyMeta.
+                generic_case_descriptor())),
+    }
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
new file mode 100644
index 000000000..b418b17d4
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class GenericMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: generic
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: generic
+        """
+
+        def __init__(self):
+            super().__init__(Generic)
+
+        def __get__(self, instance, owner=None) -> (
+                'GenericMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'Generic':
+            pass
+
+        def __enter__(self) -> 'Generic':
+            pass
+
+
+class Generic(
+        YANGContainer,
+        metaclass=GenericMeta):
+    """
+    YANG container handler.
+
+    YANG name: generic
+    """
+
+    _yang_name: Final[str] = 'generic'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'generic': (
+            generic := YANGLeafMember(
+                'generic',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'Generic':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py
new file mode 100644
index 000000000..4cb4a1de9
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py
@@ -0,0 +1,101 @@
+from typing import Dict, Final, Iterator, List, Tuple
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class NodeTemplateMeta(type):
+    """
+    Metaclass for YANG list item handler.
+
+    YANG name: node-template
+    """
+    from .te_node_attributes import TeNodeAttributes
+
+    class yang_list_descriptor(
+            YANGListMember):
+        """
+        YANG list descriptor class.
+
+        YANG name: node-template
+        """
+
+        def __init__(self):
+            super().__init__(NodeTemplate)
+
+        def __get__(self, instance, owner=None) -> (
+                'NodeTemplateMeta.yang_list_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> List['NodeTemplate']:
+            pass
+
+        def __iter__(self, key) -> Iterator['NodeTemplate']:
+            return super().__iter__()
+
+        def __getitem__(self, key) -> 'NodeTemplate':
+            return super()[key]
+
+        def __enter__(self) -> (
+                'NodeTemplateMeta.yang_list_descriptor'):
+            pass
+
+
+class NodeTemplate(
+        YANGListItem,
+        metaclass=NodeTemplateMeta):
+    """
+    YANG list item handler.
+
+    YANG name: node-template
+    """
+
+    _yang_name: Final[str] = 'node-template'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_list_key_names: Final[Tuple[str]] = (
+        'name',
+    )
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'reference-change-policy': (
+            reference_change_policy := YANGLeafMember(
+                'reference-change-policy',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'priority': (
+            priority := YANGLeafMember(
+                'priority',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'te-node-attributes': (
+            te_node_attributes := (  # YANGContainerMember(
+                NodeTemplateMeta.
+                TeNodeAttributes.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'NodeTemplate':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py
new file mode 100644
index 000000000..f643d4e5f
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py
@@ -0,0 +1,96 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class TeNodeAttributesMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: te-node-attributes
+    """
+    from .underlay_topology import UnderlayTopology
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: te-node-attributes
+        """
+
+        def __init__(self):
+            super().__init__(TeNodeAttributes)
+
+        def __get__(self, instance, owner=None) -> (
+                'TeNodeAttributesMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'TeNodeAttributes':
+            pass
+
+        def __enter__(self) -> 'TeNodeAttributes':
+            pass
+
+
+class TeNodeAttributes(
+        YANGContainer,
+        metaclass=TeNodeAttributesMeta):
+    """
+    YANG container handler.
+
+    YANG name: te-node-attributes
+    """
+
+    _yang_name: Final[str] = 'te-node-attributes'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'name': (
+            name := YANGLeafMember(
+                'name',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'is-abstract': (
+            is_abstract := YANGLeafMember(
+                'is-abstract',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'domain-id': (
+            domain_id := YANGLeafMember(
+                'domain-id',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+
+        'admin-status': (
+            admin_status := YANGLeafMember(
+                'admin-status',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+
+        'underlay-topology': (
+            underlay_topology := (  # YANGContainerMember(
+                TeNodeAttributesMeta.
+                UnderlayTopology.
+                yang_container_descriptor())),
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'TeNodeAttributes':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py
new file mode 100644
index 000000000..631b9eddf
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py
@@ -0,0 +1,71 @@
+from typing import Dict, Final
+
+from .. import (
+    YANGChoice, YANGChoiceCase, YANGContainer, YANGContainerMember,
+    YANGLeafMember, YANGListItem, YANGListMember)
+
+
+class UnderlayTopologyMeta(type):
+    """
+    Metaclass for YANG container handler.
+
+    YANG name: underlay-topology
+    """
+
+    class yang_container_descriptor(
+            YANGContainerMember):
+        """
+        YANG container descriptor class.
+
+        YANG name: underlay-topology
+        """
+
+        def __init__(self):
+            super().__init__(UnderlayTopology)
+
+        def __get__(self, instance, owner=None) -> (
+                'UnderlayTopologyMeta.yang_container_descriptor'):
+            return super().__get__(instance, owner)
+
+        def __call__(self) -> 'UnderlayTopology':
+            pass
+
+        def __enter__(self) -> 'UnderlayTopology':
+            pass
+
+
+class UnderlayTopology(
+        YANGContainer,
+        metaclass=UnderlayTopologyMeta):
+    """
+    YANG container handler.
+
+    YANG name: underlay-topology
+    """
+
+    _yang_name: Final[str] = 'underlay-topology'
+    _yang_namespace: Final[str] = 'urn:ietf:params:xml:ns:yang:ietf-te-topology'
+    _yang_module_name: Final[str] = 'ietf-te-topology'
+
+    _yang_leaf_members: Final[Dict[str, YANGLeafMember]] = {
+
+        'network-ref': (
+            network_ref := YANGLeafMember(
+                'network-ref',
+                'urn:ietf:params:xml:ns:yang:ietf-te-topology',
+                'ietf-te-topology')),
+    }
+
+    _yang_container_members: Final[Dict[str, YANGContainerMember]] = {
+    }
+
+    _yang_list_members: Final[Dict[str, YANGListMember]] = {
+    }
+
+    _yang_choices: Final[Dict[str, YANGChoice]] = None
+
+    def __new__(cls, *args, **kwargs) -> 'UnderlayTopology':
+        instance = super().__new__(cls)
+        instance._yang_choices = {
+        }
+        return instance
-- 
GitLab


From 199fbb2c8ff40815b84ca709ff983efb79e01516 Mon Sep 17 00:00:00 2001
From: Ville Hallivuori <VHallivuori@infinera.com>
Date: Tue, 21 Feb 2023 10:53:13 +0200
Subject: [PATCH 104/229] Support creating XR service without using multi-layer
 path computation

---
 src/device/service/drivers/xr/service-cli.py  | 140 ++++++++++++++++--
 .../service/drivers/xr/setup_test_env.sh      |   4 +
 2 files changed, 133 insertions(+), 11 deletions(-)

diff --git a/src/device/service/drivers/xr/service-cli.py b/src/device/service/drivers/xr/service-cli.py
index 01bd2aaa1..11cdc90fd 100755
--- a/src/device/service/drivers/xr/service-cli.py
+++ b/src/device/service/drivers/xr/service-cli.py
@@ -19,21 +19,31 @@
 #
 # Run in this directory with PYTHONPATH=../../../../
 # E.g.:
+#   Multi-layer:
 #     PYTHONPATH=../../../../  ./service-cli.py create 1 R1-EMU 13/1/2 500 2 R3-EMU 13/1/2 500
+#   Single-layer:
+#     PYTHONPATH=../../../../  ./service-cli.py create-xr mydirectservice7 X1-XR-CONSTELLATION  "XR HUB 1|XR-T1" "XR LEAF 1|XR-T1"
+#
 #     PYTHONPATH=../../../../  ./service-cli.py list
 #     PYTHONPATH=../../../../  ./service-cli.py delete 43a8046a-5dec-463d-82f7-7cc3442dbf4f
 
-
 import argparse
 import logging
-import traceback
+#import traceback
 from contextlib import contextmanager
 
 from common.Settings import get_setting
 from context.client.ContextClient import ContextClient
+from service.client.ServiceClient import ServiceClient
 from tests.tools.mock_osm.MockOSM import MockOSM
-from common.proto.context_pb2 import ContextId, ServiceTypeEnum, ServiceStatusEnum
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum, ServiceStatusEnum, Service, Context, Empty
 from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.object_factory.Context import json_context, json_context_id
+from common.tools.object_factory.Topology import json_topology_id
+from common.tools.object_factory.ConfigRule import json_config_rule_set
+from copy import deepcopy
+from dataclasses import dataclass, field
+from typing import Dict
 
 LOGGER = logging.getLogger(__name__)
 
@@ -48,11 +58,44 @@ def make_context_client():
     finally:
         _client.close()
 
+@contextmanager
+def make_service_client():
+    try:
+        _client = ServiceClient(get_setting('SERVICESERVICE_SERVICE_HOST'), get_setting('SERVICESERVICE_SERVICE_PORT_GRPC'))
+        yield _client
+    finally:
+        _client.close()
+
 def make_osm_wim():
     wim_url = 'http://{:s}:{:s}'.format(
         get_setting('COMPUTESERVICE_SERVICE_HOST'), str(get_setting('COMPUTESERVICE_SERVICE_PORT_HTTP')))
     return MockOSM(wim_url, WIM_MAPPING, WIM_USERNAME, WIM_PASSWORD)
 
+@dataclass
+class DevInfo:
+    name: str
+    uuid: str
+    # endpoints name --> uuid
+    endpoints: Dict[str, str] = field(default_factory= dict)
+
+    def get_endpoint_uuid_or_exit(self, ep_name: str) -> str:
+        if ep_name not in self.endpoints:
+            print(f"Endpoint {ep_name} does not exist in device {self.name}. See \"service-cli.py list-endpoints\"")
+            exit(-1)
+        return self.endpoints[ep_name]
+
+def get_devices(cc: ContextClient) -> Dict[str, DevInfo]:
+    r = cc.ListDevices(Empty())
+    # print(grpc_message_to_json_string(r))
+
+    devices = dict()
+    for dev in r.devices:
+        di = DevInfo(dev.name, dev.device_id.device_uuid.uuid)
+        for ep in dev.device_endpoints:
+            di.endpoints[ep.name] = ep.endpoint_id.endpoint_uuid.uuid
+        devices[dev.name] = di
+    return devices
+
 logging.basicConfig(level=logging.ERROR)
 
 parser = argparse.ArgumentParser(description='TF Service Management Utility')
@@ -74,6 +117,13 @@ delete_parser = subparsers.add_parser('delete')
 delete_parser.add_argument('service_uuid', type=str, help='UUID of the service to be deleted')
 
 list_parser = subparsers.add_parser('list')
+list_parser = subparsers.add_parser('list-endpoints')
+
+create_xr_parser = subparsers.add_parser('create-xr')
+create_xr_parser.add_argument('service_name', type=str, help='Service Name')
+create_xr_parser.add_argument('constellation', type=str, help='XR Constellation')
+create_xr_parser.add_argument('interface1', type=str, help='One endpoint of the service')
+create_xr_parser.add_argument('interface2', type=str, help='Second endpoint of the service')
 
 args = parser.parse_args()
 
@@ -103,12 +153,12 @@ else:
     WIM_SERVICE_CONNECTION_POINTS = []
 
 #print(str(args))
-print(f"=== WIM_SERVICE_TYPE: {WIM_SERVICE_TYPE}")
-print(f"=== WIM_SERVICE_CONNECTION_POINTS: {WIM_SERVICE_CONNECTION_POINTS}")
-print(f"=== WIM_MAPPING: {WIM_MAPPING}")
+#print(f"=== WIM_SERVICE_TYPE: {WIM_SERVICE_TYPE}")
+#print(f"=== WIM_SERVICE_CONNECTION_POINTS: {WIM_SERVICE_CONNECTION_POINTS}")
+#print(f"=== WIM_MAPPING: {WIM_MAPPING}")
 
 with make_context_client() as client:
-    osm_wim = make_osm_wim();
+    osm_wim = make_osm_wim()
 
     if args.command == "create":
         service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
@@ -123,22 +173,90 @@ with make_context_client() as client:
             print(f"*** Service {args.service_uuid} is no longer present (delete was successfull or service did not exist)")
         except Exception as e:
             print(f"*** Failed to delete service {args.service_uuid}, {e}")
+
+    elif args.command == "create-xr":
+        CONTEXT_NAME = 'admin'
+        CONTEXT_ID   = json_context_id(CONTEXT_NAME)
+        CONTEXT      = json_context(CONTEXT_NAME, name=CONTEXT_NAME)
+
+        json_tapi_settings = {
+            'capacity_value'  : 50.0,
+            'capacity_unit'   : 'GHz',
+            'layer_proto_name': 'PHOTONIC_MEDIA',
+            'layer_proto_qual': 'tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC',
+            'direction'       : 'UNIDIRECTIONAL',
+        }
+        config_rule = json_config_rule_set('/settings', json_tapi_settings)
+
+        response = client.ListContextIds(Empty())
+        assert len(response.context_ids) == 1
+        context_uuid=json_context_id(response.context_ids[0].context_uuid.uuid)
+
+        devices = get_devices(client)
+        if args.constellation not in devices:
+            print(f"Constellation {args.constellation} does not exist as a device. See \"service-cli.py list-endpoints\"")
+            exit(-1)
+        else:
+            dev_info = devices[args.constellation]
+            constellation_uuid = dev_info.uuid
+
+        interface1_uuid = dev_info.get_endpoint_uuid_or_exit(args.interface1)
+        interface2_uuid = dev_info.get_endpoint_uuid_or_exit(args.interface2)
+
+        print(f"Constellation {args.constellation:40}: {constellation_uuid:36}")
+        print(f"Interface 1   {args.interface1:40}: {interface1_uuid:36}")
+        print(f"Interface 2   {args.interface2:40}: {interface2_uuid:36}")
+
+        service_request = {
+            "name": args.service_name,
+            "service_id": {
+                 "context_id": {"context_uuid": {"uuid": response.context_ids[0].context_uuid.uuid}},
+                 "service_uuid": {"uuid": args.service_name}
+            },
+            'service_type'        : ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE,
+            "service_endpoint_ids": [
+                {'device_id': {'device_uuid': {'uuid': constellation_uuid}}, 'endpoint_uuid': {'uuid': interface1_uuid}, 'topology_id': json_topology_id("admin", context_id=context_uuid)},
+                {'device_id': {'device_uuid': {'uuid': constellation_uuid}}, 'endpoint_uuid': {'uuid': interface2_uuid}, 'topology_id': json_topology_id("admin", context_id=context_uuid)}
+            ],
+            'service_status'      : {'service_status': ServiceStatusEnum.SERVICESTATUS_PLANNED},
+            'service_constraints' : [],
+        }
+
+        with make_service_client() as service_client:
+            sr = deepcopy(service_request)
+            endpoints, sr['service_endpoint_ids'] = sr['service_endpoint_ids'], []
+            create_response = service_client.CreateService(Service(**sr))
+            print(f'CreateService: {grpc_message_to_json_string(create_response)}')
+
+            sr['service_endpoint_ids'] = endpoints
+            #sr['service_id']['service_uuid'] = create_response
+            sr['service_config'] = {'config_rules': [config_rule]}
+
+            update_response = service_client.UpdateService(Service(**sr))
+            print(f'UpdateService: {grpc_message_to_json_string(update_response)}')
+
     elif args.command == "list":
         response = client.ListServices(ContextId(**CONTEXT_ID))
 
         #print('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
         for service in response.services:
             scs = ""
-            
+
             # See if there are endpoint constraints that might be regognizable by the user.
             # Keys do not necessarily exist, so catch exceptions and ignore those constraints
             # that we cannot easily represent.
             for sc in service.service_constraints:
                 try:
                     scs += f"{sc.endpoint_location.endpoint_id.device_id.device_uuid.uuid}:{sc.endpoint_location.endpoint_id.endpoint_uuid.uuid} "
-                except Exception:
+                except Exception: # pylint: disable=bare-except
                     pass
 
-            print(f"{service.service_id.service_uuid.uuid:36}  {ServiceTypeEnum.Name(service.service_type):40}  {ServiceStatusEnum.Name(service.service_status.service_status)}  {scs}")
-
+            print(f"{service.service_id.service_uuid.uuid:36}  {ServiceTypeEnum.Name(service.service_type):40}  {service.name:40}  {ServiceStatusEnum.Name(service.service_status.service_status)}  {scs}")
 
+    elif args.command == "list-endpoints":
+        devices = get_devices(client)
+        for name in sorted(devices.keys()):
+            dev = devices[name]
+            print(f"{name:40}    {dev.uuid:36}")
+            for ep_name in sorted(dev.endpoints.keys()):
+                print(f"    {ep_name:40}    {dev.endpoints[ep_name]:36}")
diff --git a/src/device/service/drivers/xr/setup_test_env.sh b/src/device/service/drivers/xr/setup_test_env.sh
index 92ff4a031..bd5463cd4 100755
--- a/src/device/service/drivers/xr/setup_test_env.sh
+++ b/src/device/service/drivers/xr/setup_test_env.sh
@@ -17,7 +17,11 @@ export CONTEXTSERVICE_SERVICE_HOST=$(kubectl get service/contextservice --namesp
 export CONTEXTSERVICE_SERVICE_PORT_GRPC=$(kubectl get service/contextservice --namespace tfs  -o jsonpath='{.spec.ports[?(@.name=="grpc")].port}')
 export COMPUTESERVICE_SERVICE_HOST=$(kubectl get service/computeservice --namespace tfs  --template '{{.spec.clusterIP}}')
 export COMPUTESERVICE_SERVICE_PORT_HTTP=$(kubectl get service/computeservice --namespace tfs  -o jsonpath='{.spec.ports[?(@.name=="http")].port}')
+export SERVICESERVICE_SERVICE_HOST=$(kubectl get service/serviceservice --namespace tfs  --template '{{.spec.clusterIP}}')
+export SERVICESERVICE_SERVICE_PORT_GRPC=$(kubectl get service/serviceservice --namespace tfs  -o jsonpath='{.spec.ports[?(@.name=="grpc")].port}')
 echo "CONTEXTSERVICE_SERVICE_HOST=$CONTEXTSERVICE_SERVICE_HOST"
 echo "CONTEXTSERVICE_SERVICE_PORT_GRPC=$CONTEXTSERVICE_SERVICE_PORT_GRPC"
 echo "COMPUTESERVICE_SERVICE_HOST=$COMPUTESERVICE_SERVICE_HOST"
 echo "COMPUTESERVICE_SERVICE_PORT_HTTP=$COMPUTESERVICE_SERVICE_PORT_HTTP"
+echo "SERVICESERVICE_SERVICE_HOST=$SERVICESERVICE_SERVICE_HOST"
+echo "SERVICESERVICE_SERVICE_PORT_GRPC=$SERVICESERVICE_SERVICE_PORT_GRPC"
-- 
GitLab


From 8b3a0373fe8167bef380a1f75680f832d6d51d94 Mon Sep 17 00:00:00 2001
From: Ville Hallivuori <VHallivuori@infinera.com>
Date: Tue, 21 Feb 2023 12:25:13 +0200
Subject: [PATCH 105/229] Allow deletion of low level services with
 service-cli.py

---
 src/device/service/drivers/xr/README_XR.md   |  12 +++
 src/device/service/drivers/xr/service-cli.py | 101 +++++++++++++------
 2 files changed, 83 insertions(+), 30 deletions(-)

diff --git a/src/device/service/drivers/xr/README_XR.md b/src/device/service/drivers/xr/README_XR.md
index c741c3e80..fa1bc9440 100644
--- a/src/device/service/drivers/xr/README_XR.md
+++ b/src/device/service/drivers/xr/README_XR.md
@@ -146,6 +146,18 @@ arbitrary endpoints in the topology (with consequent underlying XR service insta
     PYTHONPATH=../../../../ ./service-cli.py list
     PYTHONPATH=../../../../ ./service-cli.py delete 43a8046a-5dec-463d-82f7-7cc3442dbf4f
 ```
+
+It is also possible to create direct XR services without multi-layer services. E.g.:
+```
+    PYTHONPATH=../../../../  ./service-cli.py create-xr FooService X1-XR-CONSTELLATION  "XR HUB 1|XR-T1" "XR LEAF 2|XR-T1"
+```
+
+Additionally it is possible to list services and endpoints:
+```
+    PYTHONPATH=../../../../  ./service-cli.py list-endpoints
+    PYTHONPATH=../../../../  ./service-cli.py delete 43a8046a-5dec-463d-82f7-7cc3442dbf4f
+```
+
 The PYTHONPATH is mandatory. Suitable topology JSON must have been loaded before. With the
 CocroachDB persistence, it is sufficient to load the topology once and it will persist.
 
diff --git a/src/device/service/drivers/xr/service-cli.py b/src/device/service/drivers/xr/service-cli.py
index 11cdc90fd..7ab9606ce 100755
--- a/src/device/service/drivers/xr/service-cli.py
+++ b/src/device/service/drivers/xr/service-cli.py
@@ -19,31 +19,33 @@
 #
 # Run in this directory with PYTHONPATH=../../../../
 # E.g.:
-#   Multi-layer:
+#   Create multi-layer service (L2 VPN over XR):
 #     PYTHONPATH=../../../../  ./service-cli.py create 1 R1-EMU 13/1/2 500 2 R3-EMU 13/1/2 500
-#   Single-layer:
-#     PYTHONPATH=../../../../  ./service-cli.py create-xr mydirectservice7 X1-XR-CONSTELLATION  "XR HUB 1|XR-T1" "XR LEAF 1|XR-T1"
-#
+#   Single-layer (XR without services on top of it):
+#     PYTHONPATH=../../../../  ./service-cli.py create-xr FooService X1-XR-CONSTELLATION  "XR HUB 1|XR-T1" "XR LEAF 2|XR-T1"
+#   List services:
 #     PYTHONPATH=../../../../  ./service-cli.py list
+#   List possible endpoints:
+#     PYTHONPATH=../../../../  ./service-cli.py list-endpoints
+#   Delete service (if multi-layer, always deleter highest layer!)
 #     PYTHONPATH=../../../../  ./service-cli.py delete 43a8046a-5dec-463d-82f7-7cc3442dbf4f
 
 import argparse
 import logging
-#import traceback
+from copy import deepcopy
+from dataclasses import dataclass, field
+from typing import Dict
 from contextlib import contextmanager
 
 from common.Settings import get_setting
 from context.client.ContextClient import ContextClient
 from service.client.ServiceClient import ServiceClient
 from tests.tools.mock_osm.MockOSM import MockOSM
-from common.proto.context_pb2 import ContextId, ServiceTypeEnum, ServiceStatusEnum, Service, Context, Empty
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum, ServiceStatusEnum, Service, Empty, ServiceId
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from common.tools.object_factory.Context import json_context, json_context_id
 from common.tools.object_factory.Topology import json_topology_id
 from common.tools.object_factory.ConfigRule import json_config_rule_set
-from copy import deepcopy
-from dataclasses import dataclass, field
-from typing import Dict
 
 LOGGER = logging.getLogger(__name__)
 
@@ -75,8 +77,8 @@ def make_osm_wim():
 class DevInfo:
     name: str
     uuid: str
-    # endpoints name --> uuid
     endpoints: Dict[str, str] = field(default_factory= dict)
+    endpoints_by_uuid: Dict[str, str] = field(default_factory= dict)
 
     def get_endpoint_uuid_or_exit(self, ep_name: str) -> str:
         if ep_name not in self.endpoints:
@@ -93,9 +95,17 @@ def get_devices(cc: ContextClient) -> Dict[str, DevInfo]:
         di = DevInfo(dev.name, dev.device_id.device_uuid.uuid)
         for ep in dev.device_endpoints:
             di.endpoints[ep.name] = ep.endpoint_id.endpoint_uuid.uuid
+            di.endpoints_by_uuid[ep.endpoint_id.endpoint_uuid.uuid] = ep.name
         devices[dev.name] = di
     return devices
 
+def get_endpoint_map(devices: Dict[str, DevInfo]):
+    ep_map = dict()
+    for dev in devices.values():
+        for ep_name, ep_uuid in dev.endpoints.items():
+            ep_map[ep_uuid] = (dev.name, ep_name)
+    return ep_map
+
 logging.basicConfig(level=logging.ERROR)
 
 parser = argparse.ArgumentParser(description='TF Service Management Utility')
@@ -158,6 +168,11 @@ else:
 #print(f"=== WIM_MAPPING: {WIM_MAPPING}")
 
 with make_context_client() as client:
+    # We only permit one context on our demos/testing
+    response = client.ListContextIds(Empty())
+    assert len(response.context_ids) == 1
+    context_uuid=json_context_id(response.context_ids[0].context_uuid.uuid)
+
     osm_wim = make_osm_wim()
 
     if args.command == "create":
@@ -167,12 +182,38 @@ with make_context_client() as client:
         print(f"*** Get created service status --> {str(status)}")
 
     elif args.command == "delete":
-        osm_wim.wim.check_credentials()
+        service_id = {
+            "context_id": context_uuid,
+            "service_uuid": {
+                "uuid": args.service_uuid
+            }
+        }
+
         try:
-            osm_wim.wim.delete_connectivity_service(args.service_uuid)
-            print(f"*** Service {args.service_uuid} is no longer present (delete was successfull or service did not exist)")
-        except Exception as e:
-            print(f"*** Failed to delete service {args.service_uuid}, {e}")
+            response = client.GetService(ServiceId(**service_id))
+            #print(grpc_message_to_json_string(response))
+
+            high_level_delete = response.service_type == ServiceTypeEnum.SERVICETYPE_L2NM or response.service_type == ServiceTypeEnum.SERVICETYPE_L3NM
+            print(f"Deleting service {response.name}, type {ServiceTypeEnum.Name(response.service_type)}, {high_level_delete=}")
+
+        except:
+            print(f"No service with uuid {args.service_uuid} ({service_id})")
+            exit(-1)
+
+        if high_level_delete:
+            osm_wim.wim.check_credentials()
+            try:
+                osm_wim.wim.delete_connectivity_service(args.service_uuid)
+                print(f"*** Service {args.service_uuid} deleted (L2SM/L3SM layer)")
+            except Exception as e:
+                print(f"*** Failed to delete service {args.service_uuid}, {e}")
+        else:
+            with make_service_client() as service_client:
+                try:
+                    service_client.DeleteService(ServiceId(**service_id))
+                    print(f"*** Service {args.service_uuid} deleted (low level)")
+                except Exception as e:
+                    print(f"*** Failed to delete service {args.service_uuid}, {e}")
 
     elif args.command == "create-xr":
         CONTEXT_NAME = 'admin'
@@ -188,10 +229,6 @@ with make_context_client() as client:
         }
         config_rule = json_config_rule_set('/settings', json_tapi_settings)
 
-        response = client.ListContextIds(Empty())
-        assert len(response.context_ids) == 1
-        context_uuid=json_context_id(response.context_ids[0].context_uuid.uuid)
-
         devices = get_devices(client)
         if args.constellation not in devices:
             print(f"Constellation {args.constellation} does not exist as a device. See \"service-cli.py list-endpoints\"")
@@ -236,22 +273,26 @@ with make_context_client() as client:
             print(f'UpdateService: {grpc_message_to_json_string(update_response)}')
 
     elif args.command == "list":
+        devices = get_devices(client)
+        ep_map = get_endpoint_map(devices)
+
         response = client.ListServices(ContextId(**CONTEXT_ID))
 
-        #print('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+        # print('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
         for service in response.services:
             scs = ""
 
-            # See if there are endpoint constraints that might be regognizable by the user.
-            # Keys do not necessarily exist, so catch exceptions and ignore those constraints
-            # that we cannot easily represent.
-            for sc in service.service_constraints:
-                try:
-                    scs += f"{sc.endpoint_location.endpoint_id.device_id.device_uuid.uuid}:{sc.endpoint_location.endpoint_id.endpoint_uuid.uuid} "
-                except Exception: # pylint: disable=bare-except
-                    pass
-
-            print(f"{service.service_id.service_uuid.uuid:36}  {ServiceTypeEnum.Name(service.service_type):40}  {service.name:40}  {ServiceStatusEnum.Name(service.service_status.service_status)}  {scs}")
+            ep_list = []
+            for ep in service.service_endpoint_ids:
+                ep_uuid = ep.endpoint_uuid.uuid
+                if ep_uuid in ep_map:
+                    dev_name, ep_name = ep_map[ep_uuid]
+                    ep_list.append(f"{dev_name}:{ep_name}")
+            ep_list.sort()
+            eps = ", ".join(ep_list)
+
+            #print(f"{service.service_id.service_uuid.uuid:36}  {ServiceTypeEnum.Name(service.service_type):40}  {service.name:40}  {ServiceStatusEnum.Name(service.service_status.service_status)}  {scs}")
+            print(f"{service.service_id.service_uuid.uuid:36}  {ServiceTypeEnum.Name(service.service_type):40}  {service.name:40}  {ServiceStatusEnum.Name(service.service_status.service_status):28}  {eps}")
 
     elif args.command == "list-endpoints":
         devices = get_devices(client)
-- 
GitLab


From 27aa1a2afb92a76a9bc629ffbf508eb26c58dd52 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 10:40:11 +0000
Subject: [PATCH 106/229] Common - Tools - Object Factory:

- Removed availability percentage from SLA Availability constraint (new feature)
---
 src/common/tools/object_factory/Constraint.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/common/tools/object_factory/Constraint.py b/src/common/tools/object_factory/Constraint.py
index ef00e3872..0df049ab7 100644
--- a/src/common/tools/object_factory/Constraint.py
+++ b/src/common/tools/object_factory/Constraint.py
@@ -29,9 +29,9 @@ def json_constraint_endpoint_location_gps(endpoint_id : Dict, latitude : float,
 def json_constraint_endpoint_priority(endpoint_id : Dict, priority : int) -> Dict:
     return {'endpoint_priority': {'endpoint_id': endpoint_id, 'priority': priority}}
 
-def json_constraint_sla_availability(num_disjoint_paths : int, all_active : bool, availability : float) -> Dict:
+def json_constraint_sla_availability(num_disjoint_paths : int, all_active : bool) -> Dict:
     return {'sla_availability': {
-        'num_disjoint_paths': num_disjoint_paths, 'all_active': all_active, 'availability': availability
+        'num_disjoint_paths': num_disjoint_paths, 'all_active': all_active
     }}
 
 def json_constraint_sla_capacity(capacity_gbps : float) -> Dict:
-- 
GitLab


From 53ea4960553dde9b9957b030bc01a84cdbfdf50b Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 10:40:34 +0000
Subject: [PATCH 107/229] Load Generator component:

- Removed availability percentage from SLA Availability constraint (new feature)
---
 src/load_generator/load_gen/RequestGenerator.py | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index 0ada285bc..e7988760b 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -230,12 +230,11 @@ class RequestGenerator:
         ]
 
         if request_type == RequestType.SERVICE_L2NM:
-            availability   = round(random.uniform(0.0,  99.99), ndigits=2)
             capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
             e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
 
             constraints = [
-                json_constraint_sla_availability(1, True, availability),
+                json_constraint_sla_availability(1, True),
                 json_constraint_sla_capacity(capacity_gbps),
                 json_constraint_sla_isolation([IsolationLevelEnum.NO_ISOLATION]),
                 json_constraint_sla_latency(e2e_latency_ms),
@@ -275,12 +274,11 @@ class RequestGenerator:
                 request_uuid, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules)
 
         elif request_type == RequestType.SERVICE_L3NM:
-            availability   = round(random.uniform(0.0,  99.99), ndigits=2)
             capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
             e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
 
             constraints = [
-                json_constraint_sla_availability(1, True, availability),
+                json_constraint_sla_availability(1, True),
                 json_constraint_sla_capacity(capacity_gbps),
                 json_constraint_sla_isolation([IsolationLevelEnum.NO_ISOLATION]),
                 json_constraint_sla_latency(e2e_latency_ms),
@@ -380,11 +378,10 @@ class RequestGenerator:
             json_endpoint_id(json_device_id(dst_device_uuid), dst_endpoint_uuid),
         ]
 
-        availability   = round(random.uniform(0.0,  99.99), ndigits=2)
         capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
         e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
         constraints = [
-            json_constraint_sla_availability(1, True, availability),
+            json_constraint_sla_availability(1, True),
             json_constraint_sla_capacity(capacity_gbps),
             json_constraint_sla_isolation([IsolationLevelEnum.NO_ISOLATION]),
             json_constraint_sla_latency(e2e_latency_ms),
-- 
GitLab


From 97f4422f3445c572233ba9ebe8e2e20007986402 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 10:40:52 +0000
Subject: [PATCH 108/229] Path Computation component - Frontend:

- Removed availability percentage from SLA Availability constraint (new feature)
---
 src/pathcomp/frontend/tests/test_unitary.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pathcomp/frontend/tests/test_unitary.py b/src/pathcomp/frontend/tests/test_unitary.py
index 8088259b8..5d642cf4c 100644
--- a/src/pathcomp/frontend/tests/test_unitary.py
+++ b/src/pathcomp/frontend/tests/test_unitary.py
@@ -203,7 +203,7 @@ def test_request_service_kdisjointpath(
     endpoint_ids, constraints = [], [
         json_constraint_sla_capacity(10.0),
         json_constraint_sla_latency(12.0),
-        json_constraint_sla_availability(2, True, 50.0),
+        json_constraint_sla_availability(2, True),
         json_constraint_custom('diversity', {'end-to-end-diverse': 'all-other-accesses'}),
     ]
 
-- 
GitLab


From 7a0636254985f95cdb9d12d80b14f25f3b59d2e1 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 10:45:23 +0000
Subject: [PATCH 109/229] Path Computation component - Frontend:

- Added availability percentage to SLA Availability constraint
---
 src/pathcomp/frontend/tests/test_unitary.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pathcomp/frontend/tests/test_unitary.py b/src/pathcomp/frontend/tests/test_unitary.py
index 5d642cf4c..8088259b8 100644
--- a/src/pathcomp/frontend/tests/test_unitary.py
+++ b/src/pathcomp/frontend/tests/test_unitary.py
@@ -203,7 +203,7 @@ def test_request_service_kdisjointpath(
     endpoint_ids, constraints = [], [
         json_constraint_sla_capacity(10.0),
         json_constraint_sla_latency(12.0),
-        json_constraint_sla_availability(2, True),
+        json_constraint_sla_availability(2, True, 50.0),
         json_constraint_custom('diversity', {'end-to-end-diverse': 'all-other-accesses'}),
     ]
 
-- 
GitLab


From 65e189a751cb559aa80a4198b108c6bd4cef9817 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 10:45:35 +0000
Subject: [PATCH 110/229] Load Generator component:

- Added availability percentage to SLA Availability constraint
---
 src/load_generator/load_gen/RequestGenerator.py | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index e7988760b..0ada285bc 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -230,11 +230,12 @@ class RequestGenerator:
         ]
 
         if request_type == RequestType.SERVICE_L2NM:
+            availability   = round(random.uniform(0.0,  99.99), ndigits=2)
             capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
             e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
 
             constraints = [
-                json_constraint_sla_availability(1, True),
+                json_constraint_sla_availability(1, True, availability),
                 json_constraint_sla_capacity(capacity_gbps),
                 json_constraint_sla_isolation([IsolationLevelEnum.NO_ISOLATION]),
                 json_constraint_sla_latency(e2e_latency_ms),
@@ -274,11 +275,12 @@ class RequestGenerator:
                 request_uuid, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules)
 
         elif request_type == RequestType.SERVICE_L3NM:
+            availability   = round(random.uniform(0.0,  99.99), ndigits=2)
             capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
             e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
 
             constraints = [
-                json_constraint_sla_availability(1, True),
+                json_constraint_sla_availability(1, True, availability),
                 json_constraint_sla_capacity(capacity_gbps),
                 json_constraint_sla_isolation([IsolationLevelEnum.NO_ISOLATION]),
                 json_constraint_sla_latency(e2e_latency_ms),
@@ -378,10 +380,11 @@ class RequestGenerator:
             json_endpoint_id(json_device_id(dst_device_uuid), dst_endpoint_uuid),
         ]
 
+        availability   = round(random.uniform(0.0,  99.99), ndigits=2)
         capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
         e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
         constraints = [
-            json_constraint_sla_availability(1, True),
+            json_constraint_sla_availability(1, True, availability),
             json_constraint_sla_capacity(capacity_gbps),
             json_constraint_sla_isolation([IsolationLevelEnum.NO_ISOLATION]),
             json_constraint_sla_latency(e2e_latency_ms),
-- 
GitLab


From b82e55e56c6a40671faf7524669cdf6a869fce95 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 10:45:46 +0000
Subject: [PATCH 111/229] Common - Tools - Object Factory:

- Added availability percentage to SLA Availability constraint
---
 src/common/tools/object_factory/Constraint.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/common/tools/object_factory/Constraint.py b/src/common/tools/object_factory/Constraint.py
index 0df049ab7..ef00e3872 100644
--- a/src/common/tools/object_factory/Constraint.py
+++ b/src/common/tools/object_factory/Constraint.py
@@ -29,9 +29,9 @@ def json_constraint_endpoint_location_gps(endpoint_id : Dict, latitude : float,
 def json_constraint_endpoint_priority(endpoint_id : Dict, priority : int) -> Dict:
     return {'endpoint_priority': {'endpoint_id': endpoint_id, 'priority': priority}}
 
-def json_constraint_sla_availability(num_disjoint_paths : int, all_active : bool) -> Dict:
+def json_constraint_sla_availability(num_disjoint_paths : int, all_active : bool, availability : float) -> Dict:
     return {'sla_availability': {
-        'num_disjoint_paths': num_disjoint_paths, 'all_active': all_active
+        'num_disjoint_paths': num_disjoint_paths, 'all_active': all_active, 'availability': availability
     }}
 
 def json_constraint_sla_capacity(capacity_gbps : float) -> Dict:
-- 
GitLab


From 3c6645073de16c768035437166eb522d4ed3e104 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 10:50:16 +0000
Subject: [PATCH 112/229] Common - Tools - gRPC Helpers:

- Removed availability percentage from SLA Availability constraint (new feature)
---
 src/common/tools/grpc/Constraints.py | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/common/tools/grpc/Constraints.py b/src/common/tools/grpc/Constraints.py
index 07f0b7782..f33e7b1ef 100644
--- a/src/common/tools/grpc/Constraints.py
+++ b/src/common/tools/grpc/Constraints.py
@@ -160,7 +160,7 @@ def update_constraint_sla_latency(constraints, e2e_latency_ms : float) -> Constr
     return constraint
 
 def update_constraint_sla_availability(
-    constraints, num_disjoint_paths : int, all_active : bool, availability : float
+    constraints, num_disjoint_paths : int, all_active : bool
 ) -> Constraint:
     for constraint in constraints:
         if constraint.WhichOneof('constraint') != 'sla_availability': continue
@@ -171,7 +171,6 @@ def update_constraint_sla_availability(
 
     constraint.sla_availability.num_disjoint_paths = num_disjoint_paths
     constraint.sla_availability.all_active = all_active
-    constraint.sla_availability.availability = availability
     return constraint
 
 def update_constraint_sla_isolation(constraints, isolation_levels : List[int]) -> Constraint:
@@ -240,8 +239,7 @@ def copy_constraints(source_constraints, target_constraints):
             sla_availability = source_constraint.sla_availability
             num_disjoint_paths = sla_availability.num_disjoint_paths
             all_active = sla_availability.all_active
-            availability = sla_availability.availability
-            update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active, availability)
+            update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active)
 
         elif constraint_kind == 'sla_isolation':
             sla_isolation = source_constraint.sla_isolation
-- 
GitLab


From b9d8455c8ad4bf8985f080a10fe0cae318ff97d9 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 10:51:43 +0000
Subject: [PATCH 113/229] Common - Tools - gRPC Helpers:

- Added availability percentage to SLA Availability constraint
---
 src/common/tools/grpc/Constraints.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/common/tools/grpc/Constraints.py b/src/common/tools/grpc/Constraints.py
index f33e7b1ef..07f0b7782 100644
--- a/src/common/tools/grpc/Constraints.py
+++ b/src/common/tools/grpc/Constraints.py
@@ -160,7 +160,7 @@ def update_constraint_sla_latency(constraints, e2e_latency_ms : float) -> Constr
     return constraint
 
 def update_constraint_sla_availability(
-    constraints, num_disjoint_paths : int, all_active : bool
+    constraints, num_disjoint_paths : int, all_active : bool, availability : float
 ) -> Constraint:
     for constraint in constraints:
         if constraint.WhichOneof('constraint') != 'sla_availability': continue
@@ -171,6 +171,7 @@ def update_constraint_sla_availability(
 
     constraint.sla_availability.num_disjoint_paths = num_disjoint_paths
     constraint.sla_availability.all_active = all_active
+    constraint.sla_availability.availability = availability
     return constraint
 
 def update_constraint_sla_isolation(constraints, isolation_levels : List[int]) -> Constraint:
@@ -239,7 +240,8 @@ def copy_constraints(source_constraints, target_constraints):
             sla_availability = source_constraint.sla_availability
             num_disjoint_paths = sla_availability.num_disjoint_paths
             all_active = sla_availability.all_active
-            update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active)
+            availability = sla_availability.availability
+            update_constraint_sla_availability(target_constraints, num_disjoint_paths, all_active, availability)
 
         elif constraint_kind == 'sla_isolation':
             sla_isolation = source_constraint.sla_isolation
-- 
GitLab


From f2f26f828537c3da06ac3c335f2a70061debd814 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 11:19:58 +0000
Subject: [PATCH 114/229] Slice component:

- Added close connection to enable load balancing in requests
---
 src/slice/service/SliceServiceServicerImpl.py | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/slice/service/SliceServiceServicerImpl.py b/src/slice/service/SliceServiceServicerImpl.py
index 717127a00..acec3ae30 100644
--- a/src/slice/service/SliceServiceServicerImpl.py
+++ b/src/slice/service/SliceServiceServicerImpl.py
@@ -64,7 +64,9 @@ class SliceServiceServicerImpl(SliceServiceServicer):
             # unable to identify the kind of slice; just update endpoints, constraints and config rules
             # update the slice in database, and return
             # pylint: disable=no-member
-            return context_client.SetSlice(slice_rw)
+            reply = context_client.SetSlice(slice_rw)
+            context_client.close()
+            return reply
 
         slice_with_uuids = context_client.GetSlice(slice_id_with_uuids)
 
@@ -82,10 +84,12 @@ class SliceServiceServicerImpl(SliceServiceServicer):
             slice_active.CopyFrom(slice_)
             slice_active.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_ACTIVE # pylint: disable=no-member
             context_client.SetSlice(slice_active)
+            interdomain_client.close()
+            context_client.close()
             return slice_id
 
         if self._slice_grouper.is_enabled:
-            grouped = self._slice_grouper.group(slice_with_uuids)
+            grouped = self._slice_grouper.group(slice_with_uuids) # pylint: disable=unused-variable
 
         # Local domain slice
         service_id = ServiceId()
@@ -159,6 +163,9 @@ class SliceServiceServicerImpl(SliceServiceServicer):
         slice_active.CopyFrom(slice_)
         slice_active.slice_status.slice_status = SliceStatusEnum.SLICESTATUS_ACTIVE # pylint: disable=no-member
         context_client.SetSlice(slice_active)
+
+        service_client.close()
+        context_client.close()
         return slice_id
 
     @safe_and_metered_rpc_method(METRICS_POOL, LOGGER)
@@ -195,6 +202,7 @@ class SliceServiceServicerImpl(SliceServiceServicer):
         try:
             _slice = context_client.GetSlice(request)
         except: # pylint: disable=bare-except
+            context_client.close()
             return Empty()
 
         if is_multi_domain(context_client, _slice.slice_endpoint_ids):
@@ -208,7 +216,7 @@ class SliceServiceServicerImpl(SliceServiceServicer):
             context_client.SetSlice(current_slice)
 
             if self._slice_grouper.is_enabled:
-                ungrouped = self._slice_grouper.ungroup(current_slice)
+                ungrouped = self._slice_grouper.ungroup(current_slice) # pylint: disable=unused-variable
 
             service_client = ServiceClient()
             for service_id in _slice.slice_service_ids:
@@ -219,6 +227,8 @@ class SliceServiceServicerImpl(SliceServiceServicer):
                 context_client.UnsetSlice(current_slice)
 
                 service_client.DeleteService(service_id)
+            service_client.close()
 
         context_client.RemoveSlice(request)
+        context_client.close()
         return Empty()
-- 
GitLab


From 09036cdf24248d571bde520ca0db0fae14f0b21c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 12:52:26 +0000
Subject: [PATCH 115/229] Context component:

- Added indexes recommended by Cockroach internal planner to boost performance
---
 src/context/service/database/models/_Base.py | 39 +++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

diff --git a/src/context/service/database/models/_Base.py b/src/context/service/database/models/_Base.py
index 4323fb713..973f7b7be 100644
--- a/src/context/service/database/models/_Base.py
+++ b/src/context/service/database/models/_Base.py
@@ -13,10 +13,47 @@
 # limitations under the License.
 
 import sqlalchemy
-from sqlalchemy.orm import declarative_base
+from typing import Any, List
+from sqlalchemy.orm import Session, sessionmaker, declarative_base
+from sqlalchemy.sql import text
+from sqlalchemy_cockroachdb import run_transaction
 
 _Base = declarative_base()
 
+def create_performance_enhancers(db_engine : sqlalchemy.engine.Engine) -> None:
+    def index_storing(
+        index_name : str, table_name : str, index_fields : List[str], storing_fields : List[str]
+    ) -> Any:
+        str_index_fields = ','.join(['"{:s}"'.format(index_field) for index_field in index_fields])
+        str_storing_fields = ','.join(['"{:s}"'.format(storing_field) for storing_field in storing_fields])
+        INDEX_STORING = 'CREATE INDEX IF NOT EXISTS {:s} ON "{:s}" ({:s}) STORING ({:s});'
+        return text(INDEX_STORING.format(index_name, table_name, str_index_fields, str_storing_fields))
+
+    statements = [
+        index_storing('configrule_device_uuid_rec_idx', 'configrule', ['device_uuid'], [
+            'service_uuid', 'slice_uuid', 'position', 'kind', 'action', 'data', 'created_at', 'updated_at'
+        ]),
+        index_storing('configrule_service_uuid_rec_idx', 'configrule', ['service_uuid'], [
+            'device_uuid', 'slice_uuid', 'position', 'kind', 'action', 'data', 'created_at', 'updated_at'
+        ]),
+        index_storing('configrule_slice_uuid_rec_idx', 'configrule', ['slice_uuid'], [
+            'device_uuid', 'service_uuid', 'position', 'kind', 'action', 'data', 'created_at', 'updated_at'
+        ]),
+        index_storing('constraint_service_uuid_rec_idx', 'constraint', ['service_uuid'], [
+            'slice_uuid', 'position', 'kind', 'data', 'created_at', 'updated_at'
+        ]),
+        index_storing('constraint_slice_uuid_rec_idx', 'constraint', ['slice_uuid'], [
+            'service_uuid', 'position', 'kind', 'data', 'created_at', 'updated_at'
+        ]),
+        index_storing('endpoint_device_uuid_rec_idx', 'endpoint', ['device_uuid'], [
+            'topology_uuid', 'name', 'endpoint_type', 'kpi_sample_types', 'created_at', 'updated_at'
+        ]),
+    ]
+    def callback(session : Session) -> bool:
+        for stmt in statements: session.execute(stmt)
+    run_transaction(sessionmaker(bind=db_engine), callback)
+
 def rebuild_database(db_engine : sqlalchemy.engine.Engine, drop_if_exists : bool = False):
     if drop_if_exists: _Base.metadata.drop_all(db_engine)
     _Base.metadata.create_all(db_engine)
+    create_performance_enhancers(db_engine)
-- 
GitLab


From f9d7878295f5454c29c4b283ef4982fc3f8ce006 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 13:15:31 +0000
Subject: [PATCH 116/229] Slice component:

- Disabled slice grouping by default
---
 manifests/sliceservice.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/manifests/sliceservice.yaml b/manifests/sliceservice.yaml
index e5757874b..49e2b5943 100644
--- a/manifests/sliceservice.yaml
+++ b/manifests/sliceservice.yaml
@@ -38,7 +38,7 @@ spec:
         - name: LOG_LEVEL
           value: "INFO"
         - name: SLICE_GROUPING
-          value: "ENABLE"
+          value: "DISABLE"
         envFrom:
         - secretRef:
             name: qdb-data
-- 
GitLab


From fcbe36414e0f29a2a8a49589bfeec2419b66e4be Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 14:24:46 +0000
Subject: [PATCH 117/229] WebUI component:

- Updated number of 9's for availability
---
 src/webui/service/templates/service/detail.html | 2 +-
 src/webui/service/templates/slice/detail.html   | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/webui/service/templates/service/detail.html b/src/webui/service/templates/service/detail.html
index 7d3c72a80..bee2e93c5 100644
--- a/src/webui/service/templates/service/detail.html
+++ b/src/webui/service/templates/service/detail.html
@@ -157,7 +157,7 @@
             <td>SLA Availability</td>
             <td>-</td>
             <td>
-                {{ round(constraint.sla_availability.availability, ndigits=2) }} %;
+                {{ round(constraint.sla_availability.availability, ndigits=5) }} %;
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
                 {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
diff --git a/src/webui/service/templates/slice/detail.html b/src/webui/service/templates/slice/detail.html
index 6c35e6b50..8f223e44d 100644
--- a/src/webui/service/templates/slice/detail.html
+++ b/src/webui/service/templates/slice/detail.html
@@ -157,7 +157,7 @@
             <td>SLA Availability</td>
             <td>-</td>
             <td>
-                {{ round(constraint.sla_availability.availability, ndigits=2) }} %;
+                {{ round(constraint.sla_availability.availability, ndigits=5) }} %;
                 {{ constraint.sla_availability.num_disjoint_paths }} disjoint paths;
                 {% if constraint.sla_availability.all_active %}all{% else %}single{% endif %}-active
             </td>
-- 
GitLab


From 2037276f55e667faff7628a4ddd85b5e22aca942 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 14:25:00 +0000
Subject: [PATCH 118/229] Load Generator component:

- Updated number of 9's for availability
---
 src/load_generator/load_gen/RequestGenerator.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index 0ada285bc..a70032dc6 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -230,7 +230,7 @@ class RequestGenerator:
         ]
 
         if request_type == RequestType.SERVICE_L2NM:
-            availability   = round(random.uniform(0.0,  99.99), ndigits=2)
+            availability   = round(random.uniform(0.0,  99.99), ndigits=5)
             capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
             e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
 
@@ -275,7 +275,7 @@ class RequestGenerator:
                 request_uuid, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules)
 
         elif request_type == RequestType.SERVICE_L3NM:
-            availability   = round(random.uniform(0.0,  99.99), ndigits=2)
+            availability   = round(random.uniform(0.0,  99.99), ndigits=5)
             capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
             e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
 
@@ -380,7 +380,7 @@ class RequestGenerator:
             json_endpoint_id(json_device_id(dst_device_uuid), dst_endpoint_uuid),
         ]
 
-        availability   = round(random.uniform(0.0,  99.99), ndigits=2)
+        availability   = round(random.uniform(0.0,  99.99), ndigits=5)
         capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
         e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
         constraints = [
-- 
GitLab


From 9ba0946a63345466355f33920046f884d7705acc Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 14:33:09 +0000
Subject: [PATCH 119/229] Hackfest - Mock OSM:

- Minor code cleanup
---
 hackfest/mock_osm/__main__.py | 2 --
 1 file changed, 2 deletions(-)

diff --git a/hackfest/mock_osm/__main__.py b/hackfest/mock_osm/__main__.py
index 669da2b5e..4ed25eaed 100644
--- a/hackfest/mock_osm/__main__.py
+++ b/hackfest/mock_osm/__main__.py
@@ -58,13 +58,11 @@ SERVICE_CONNECTION_POINTS = [
 class MockOSMShell(cmd.Cmd):
     intro = 'Welcome to the MockOSM shell.\nType help or ? to list commands.\n'
     prompt = '(mock-osm) '
-    file = None
 
     def __init__(self, *args, **kwargs) -> None:
         super().__init__(*args, **kwargs)
         self.mock_osm = MockOSM(WIM_URL, WIM_PORT_MAPPING, WIM_USERNAME, WIM_PASSWORD)
 
-    # ----- basic turtle commands -----
     def do_create(self, arg):
         'Create an ELINE (L2) service'
         service_uuid = self.mock_osm.create_connectivity_service(
-- 
GitLab


From 49ce0990a1bbb0fbee8b58eff2261b3962067f00 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 14:39:48 +0000
Subject: [PATCH 120/229] Compute component - IETF L2VPN:

- Added new field availability in SLA Availability update
---
 .../nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py         | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
index 1a8936ed4..b89fa2207 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/L2VPN_SiteNetworkAccesses.py
@@ -113,7 +113,7 @@ def process_site_network_access(context_client : ContextClient, site_id : str, s
             location_endpoints.setdefault(str_location_id, set()).add(str_endpoint_id)
         num_endpoints_per_location = {len(endpoints) for endpoints in location_endpoints.values()}
         num_disjoint_paths = min(num_endpoints_per_location)
-        update_constraint_sla_availability(constraints, num_disjoint_paths, all_active)
+        update_constraint_sla_availability(constraints, num_disjoint_paths, all_active, 0.0)
 
     return target
 
-- 
GitLab


From 8c92eafbf45af038c46e2d0dd341d406fbc7b62c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 14:49:00 +0000
Subject: [PATCH 121/229] Load Generator component:

- Updated number of 9's for availability
---
 src/load_generator/load_gen/RequestGenerator.py | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index a70032dc6..e94dc0cb9 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -230,7 +230,7 @@ class RequestGenerator:
         ]
 
         if request_type == RequestType.SERVICE_L2NM:
-            availability   = round(random.uniform(0.0,  99.99), ndigits=5)
+            availability   = round(random.uniform(0.0, 99.9999), ndigits=5)
             capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
             e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
 
@@ -275,7 +275,7 @@ class RequestGenerator:
                 request_uuid, endpoint_ids=endpoint_ids, constraints=constraints, config_rules=config_rules)
 
         elif request_type == RequestType.SERVICE_L3NM:
-            availability   = round(random.uniform(0.0,  99.99), ndigits=5)
+            availability   = round(random.uniform(0.0, 99.9999), ndigits=5)
             capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
             e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
 
@@ -380,7 +380,7 @@ class RequestGenerator:
             json_endpoint_id(json_device_id(dst_device_uuid), dst_endpoint_uuid),
         ]
 
-        availability   = round(random.uniform(0.0,  99.99), ndigits=5)
+        availability   = round(random.uniform(0.0, 99.9999), ndigits=5)
         capacity_gbps  = round(random.uniform(0.1, 100.00), ndigits=2)
         e2e_latency_ms = round(random.uniform(5.0, 100.00), ndigits=2)
         constraints = [
-- 
GitLab


From ae9844ff44f750dac046a430c4f871b5da3de114 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 14:53:30 +0000
Subject: [PATCH 122/229] Slice component:

- Removed unneeded README.md file
---
 src/slice/service/README.md | 38 -------------------------------------
 1 file changed, 38 deletions(-)
 delete mode 100644 src/slice/service/README.md

diff --git a/src/slice/service/README.md b/src/slice/service/README.md
deleted file mode 100644
index 696b4a6e0..000000000
--- a/src/slice/service/README.md
+++ /dev/null
@@ -1,38 +0,0 @@
-# SLICE GROUPING details
-
-## Description
-- Similar slice requests can share underlying services.
-- Clustering algorithm for slice grouping.
-- Consider both paths and SLA constraints.
-- SLA monitored by slice group.
-
-## TFS Target Objective
-- Objective 3.2: Provisioning of multi-tenant transport network slices.
-- Improve network resource usage by 30% by adopting multi-tenancy resource allocation algorithms.
-- Optimal slice grouping: trade-offs between economies of scale and limitations as to which SLAs can be grouped together need to be considered.
-- Optimal grouping of slices is required to maximise KPIs, such as resource utilisation, utility of the connectivity, and energy efficiency.
-- In this context, trade-offs between the resulting control plane complexity and differential treatment of SLA classes should be considered.
-
-## New Requirements
-- User can select if slice grouping is performed per-slice request.
-- Slice grouping introduces a clustering algorithm for finding service optimisation while preserving slice SLA.
-- Service (re-)optimisation is provided.
-
-## TFS Architecture Update
-- Update Slice service RPC to include Slice Grouping.
-- Use novel Slice model with SLA constraints.
-- Use Policy Component with action to update services to apply slice grouping.
-- Describe Slice service operation modes: per-request or user-triggered.
-
-    OSS/BSS --> Slice   : Create Slice with SLA (slice)
-    Slice   --> Slice   : Slice Grouping (slice)
-alt [slice can be grouped to other slice services]
-    // do nothing and return existing slice
-else [slice needs new services]
-    Slice   --> ... : normal logic
-end alt
-    Slice   --> OSS/BSS : slice
-
-slice.proto:
-  rpc OrderSliceWithSLA(context.Slice) returns (context.SliceId) {} // If slice with SLA already exists, returns slice. If not, it creates it.
-  rpc RunSliceGrouping (context.Empty) returns (context.Empty) {} // Optimizes the underlying services and re-maps them to the requested slices.
-- 
GitLab


From 48d3068bb6a09aea87e7a53ec17b4bb493d861f4 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 14:58:17 +0000
Subject: [PATCH 123/229] Deploy script:

- Removed manual changes in my_deploy.sh
---
 my_deploy.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/my_deploy.sh b/my_deploy.sh
index 6a360812b..518b90f28 100755
--- a/my_deploy.sh
+++ b/my_deploy.sh
@@ -57,7 +57,7 @@ export CRDB_DATABASE="tfs"
 export CRDB_DEPLOY_MODE="single"
 
 # Disable flag for dropping database, if it exists.
-export CRDB_DROP_DATABASE_IF_EXISTS="YES"
+export CRDB_DROP_DATABASE_IF_EXISTS=""
 
 # Disable flag for re-deploying CockroachDB from scratch.
 export CRDB_REDEPLOY=""
@@ -90,7 +90,7 @@ export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
 export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
 
 # Disable flag for dropping tables if they exist.
-export QDB_DROP_TABLES_IF_EXIST="YES"
+export QDB_DROP_TABLES_IF_EXIST=""
 
 # Disable flag for re-deploying QuestDB from scratch.
 export QDB_REDEPLOY=""
-- 
GitLab


From 1b2785f2adacd099884931ce1871aff573c43af0 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 15:56:51 +0000
Subject: [PATCH 124/229] Context component:

- Added indexes recommended by Cockroach internal planner to boost performance
- Added extra foreign-key indexes to enhance constraint validation
---
 src/context/service/database/PolicyRule.py    | 30 +++++++++----------
 .../database/models/ConfigRuleModel.py        |  6 ++--
 .../database/models/ConnectionModel.py        |  6 ++--
 .../database/models/ConstraintModel.py        |  4 +--
 .../service/database/models/EndPointModel.py  |  4 +--
 .../service/database/models/LinkModel.py      |  2 +-
 .../database/models/PolicyRuleModel.py        | 22 +++++++-------
 .../service/database/models/ServiceModel.py   |  4 +--
 .../service/database/models/SliceModel.py     | 10 +++----
 .../service/database/models/TopologyModel.py  | 10 +++----
 src/context/service/database/models/_Base.py  | 13 ++++++++
 11 files changed, 62 insertions(+), 49 deletions(-)

diff --git a/src/context/service/database/PolicyRule.py b/src/context/service/database/PolicyRule.py
index a10010389..e95cec4ae 100644
--- a/src/context/service/database/PolicyRule.py
+++ b/src/context/service/database/PolicyRule.py
@@ -65,7 +65,7 @@ def policyrule_set(db_engine : Engine, request : PolicyRule) -> Tuple[PolicyRule
 
     policyrule_kind  = PolicyRuleKindEnum._member_map_.get(policyrule_kind.upper()) # pylint: disable=no-member
     policyrule_state = grpc_to_enum__policyrule_state(policyrule_basic.policyRuleState.policyRuleState)
-    policyrule_state_message = policyrule_basic.policyRuleState.policyRuleStateMessage
+    policyrule_state_msg = policyrule_basic.policyRuleState.policyRuleStateMessage
 
     json_policyrule_basic = grpc_message_to_json(policyrule_basic)
     policyrule_eca_data = json.dumps({
@@ -77,15 +77,15 @@ def policyrule_set(db_engine : Engine, request : PolicyRule) -> Tuple[PolicyRule
     now = datetime.datetime.utcnow()
 
     policyrule_data = [{
-        'policyrule_uuid'         : policyrule_uuid,
-        'policyrule_kind'         : policyrule_kind,
-        'policyrule_state'        : policyrule_state,
-        'policyrule_state_message': policyrule_state_message,
-        'policyrule_priority'     : policyrule_basic.priority,
-        'policyrule_eca_data'     : policyrule_eca_data,
-        'created_at'              : now,
-        'updated_at'              : now,
-    }]
+        'policyrule_uuid'     : policyrule_uuid,
+        'policyrule_kind'     : policyrule_kind,
+        'policyrule_state'    : policyrule_state,
+        'policyrule_state_msg': policyrule_state_msg,
+        'policyrule_priority' : policyrule_basic.priority,
+        'policyrule_eca_data' : policyrule_eca_data,
+        'created_at'          : now,
+        'updated_at'          : now,
+    }] 
 
     policyrule_service_uuid = None
     if policyrule_kind == PolicyRuleKindEnum.SERVICE:
@@ -108,11 +108,11 @@ def policyrule_set(db_engine : Engine, request : PolicyRule) -> Tuple[PolicyRule
         stmt = stmt.on_conflict_do_update(
             index_elements=[PolicyRuleModel.policyrule_uuid],
             set_=dict(
-                policyrule_state         = stmt.excluded.policyrule_state,
-                policyrule_state_message = stmt.excluded.policyrule_state_message,
-                policyrule_priority      = stmt.excluded.policyrule_priority,
-                policyrule_eca_data      = stmt.excluded.policyrule_eca_data,
-                updated_at               = stmt.excluded.updated_at,
+                policyrule_state     = stmt.excluded.policyrule_state,
+                policyrule_state_msg = stmt.excluded.policyrule_state_msg,
+                policyrule_priority  = stmt.excluded.policyrule_priority,
+                policyrule_eca_data  = stmt.excluded.policyrule_eca_data,
+                updated_at           = stmt.excluded.updated_at,
             )
         )
         stmt = stmt.returning(PolicyRuleModel.created_at, PolicyRuleModel.updated_at)
diff --git a/src/context/service/database/models/ConfigRuleModel.py b/src/context/service/database/models/ConfigRuleModel.py
index 363611105..d7bb97cd0 100644
--- a/src/context/service/database/models/ConfigRuleModel.py
+++ b/src/context/service/database/models/ConfigRuleModel.py
@@ -28,9 +28,9 @@ class ConfigRuleModel(_Base):
     __tablename__ = 'configrule'
 
     configrule_uuid = Column(UUID(as_uuid=False), primary_key=True)
-    device_uuid     = Column(ForeignKey('device.device_uuid',   ondelete='CASCADE'), nullable=True)
-    service_uuid    = Column(ForeignKey('service.service_uuid', ondelete='CASCADE'), nullable=True)
-    slice_uuid      = Column(ForeignKey('slice.slice_uuid',     ondelete='CASCADE'), nullable=True)
+    device_uuid     = Column(ForeignKey('device.device_uuid',   ondelete='CASCADE'), nullable=True, index=True)
+    service_uuid    = Column(ForeignKey('service.service_uuid', ondelete='CASCADE'), nullable=True, index=True)
+    slice_uuid      = Column(ForeignKey('slice.slice_uuid',     ondelete='CASCADE'), nullable=True, index=True)
     position        = Column(Integer, nullable=False)
     kind            = Column(Enum(ConfigRuleKindEnum), nullable=False)
     action          = Column(Enum(ORM_ConfigActionEnum), nullable=False)
diff --git a/src/context/service/database/models/ConnectionModel.py b/src/context/service/database/models/ConnectionModel.py
index c2b20de20..156e33c6b 100644
--- a/src/context/service/database/models/ConnectionModel.py
+++ b/src/context/service/database/models/ConnectionModel.py
@@ -25,7 +25,7 @@ class ConnectionModel(_Base):
     __tablename__ = 'connection'
 
     connection_uuid = Column(UUID(as_uuid=False), primary_key=True)
-    service_uuid    = Column(ForeignKey('service.service_uuid', ondelete='RESTRICT'), nullable=False)
+    service_uuid    = Column(ForeignKey('service.service_uuid', ondelete='RESTRICT'), nullable=False, index=True)
     settings        = Column(String, nullable=False)
     created_at      = Column(DateTime, nullable=False)
     updated_at      = Column(DateTime, nullable=False)
@@ -56,7 +56,7 @@ class ConnectionEndPointModel(_Base):
     __tablename__ = 'connection_endpoint'
 
     connection_uuid = Column(ForeignKey('connection.connection_uuid', ondelete='CASCADE' ), primary_key=True)
-    endpoint_uuid   = Column(ForeignKey('endpoint.endpoint_uuid',     ondelete='RESTRICT'), primary_key=True)
+    endpoint_uuid   = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
     position        = Column(Integer, nullable=False)
 
     connection = relationship('ConnectionModel', back_populates='connection_endpoints', lazy='joined')
@@ -70,7 +70,7 @@ class ConnectionSubServiceModel(_Base):
     __tablename__ = 'connection_subservice'
 
     connection_uuid = Column(ForeignKey('connection.connection_uuid', ondelete='CASCADE' ), primary_key=True)
-    subservice_uuid = Column(ForeignKey('service.service_uuid',       ondelete='RESTRICT'), primary_key=True)
+    subservice_uuid = Column(ForeignKey('service.service_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
 
     connection = relationship('ConnectionModel', back_populates='connection_subservices', lazy='joined')
     subservice = relationship('ServiceModel',    lazy='joined') # back_populates='connection_subservices'
diff --git a/src/context/service/database/models/ConstraintModel.py b/src/context/service/database/models/ConstraintModel.py
index e9660d502..2412080c1 100644
--- a/src/context/service/database/models/ConstraintModel.py
+++ b/src/context/service/database/models/ConstraintModel.py
@@ -35,8 +35,8 @@ class ConstraintModel(_Base):
     __tablename__ = 'constraint'
 
     constraint_uuid = Column(UUID(as_uuid=False), primary_key=True)
-    service_uuid    = Column(ForeignKey('service.service_uuid', ondelete='CASCADE'), nullable=True)
-    slice_uuid      = Column(ForeignKey('slice.slice_uuid',     ondelete='CASCADE'), nullable=True)
+    service_uuid    = Column(ForeignKey('service.service_uuid', ondelete='CASCADE'), nullable=True, index=True)
+    slice_uuid      = Column(ForeignKey('slice.slice_uuid',     ondelete='CASCADE'), nullable=True, index=True)
     position        = Column(Integer, nullable=False)
     kind            = Column(Enum(ConstraintKindEnum), nullable=False)
     data            = Column(String, nullable=False)
diff --git a/src/context/service/database/models/EndPointModel.py b/src/context/service/database/models/EndPointModel.py
index e591bc718..12ba7e10e 100644
--- a/src/context/service/database/models/EndPointModel.py
+++ b/src/context/service/database/models/EndPointModel.py
@@ -23,8 +23,8 @@ class EndPointModel(_Base):
     __tablename__ = 'endpoint'
 
     endpoint_uuid    = Column(UUID(as_uuid=False), primary_key=True)
-    device_uuid      = Column(ForeignKey('device.device_uuid',     ondelete='CASCADE' ), nullable=False)
-    topology_uuid    = Column(ForeignKey('topology.topology_uuid', ondelete='RESTRICT'), nullable=False)
+    device_uuid      = Column(ForeignKey('device.device_uuid',     ondelete='CASCADE' ), nullable=False, index=True)
+    topology_uuid    = Column(ForeignKey('topology.topology_uuid', ondelete='RESTRICT'), nullable=False, index=True)
     name             = Column(String, nullable=False)
     endpoint_type    = Column(String, nullable=False)
     kpi_sample_types = Column(ARRAY(Enum(ORM_KpiSampleTypeEnum), dimensions=1))
diff --git a/src/context/service/database/models/LinkModel.py b/src/context/service/database/models/LinkModel.py
index 49c62d376..ee591f5c8 100644
--- a/src/context/service/database/models/LinkModel.py
+++ b/src/context/service/database/models/LinkModel.py
@@ -46,7 +46,7 @@ class LinkEndPointModel(_Base):
     __tablename__ = 'link_endpoint'
 
     link_uuid     = Column(ForeignKey('link.link_uuid',         ondelete='CASCADE' ), primary_key=True)
-    endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True)
+    endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
 
     link     = relationship('LinkModel',     back_populates='link_endpoints', lazy='joined')
     endpoint = relationship('EndPointModel', lazy='joined') # back_populates='link_endpoints'
diff --git a/src/context/service/database/models/PolicyRuleModel.py b/src/context/service/database/models/PolicyRuleModel.py
index 4059991e1..2f0c8a326 100644
--- a/src/context/service/database/models/PolicyRuleModel.py
+++ b/src/context/service/database/models/PolicyRuleModel.py
@@ -28,15 +28,15 @@ class PolicyRuleKindEnum(enum.Enum):
 class PolicyRuleModel(_Base):
     __tablename__ = 'policyrule'
 
-    policyrule_uuid          = Column(UUID(as_uuid=False), primary_key=True)
-    policyrule_kind          = Column(Enum(PolicyRuleKindEnum), nullable=False)
-    policyrule_state         = Column(Enum(ORM_PolicyRuleStateEnum), nullable=False)
-    policyrule_state_message = Column(String, nullable=False)
-    policyrule_priority      = Column(Integer, nullable=False)
-    policyrule_service_uuid  = Column(ForeignKey('service.service_uuid', ondelete='RESTRICT'), nullable=True)
-    policyrule_eca_data      = Column(String, nullable=False)
-    created_at               = Column(DateTime, nullable=False)
-    updated_at               = Column(DateTime, nullable=False)
+    policyrule_uuid         = Column(UUID(as_uuid=False), primary_key=True)
+    policyrule_kind         = Column(Enum(PolicyRuleKindEnum), nullable=False)
+    policyrule_state        = Column(Enum(ORM_PolicyRuleStateEnum), nullable=False)
+    policyrule_state_msg    = Column(String, nullable=False)
+    policyrule_priority     = Column(Integer, nullable=False)
+    policyrule_service_uuid = Column(ForeignKey('service.service_uuid', ondelete='RESTRICT'), nullable=True, index=True)
+    policyrule_eca_data     = Column(String, nullable=False)
+    created_at              = Column(DateTime, nullable=False)
+    updated_at              = Column(DateTime, nullable=False)
 
     policyrule_service = relationship('ServiceModel') # back_populates='policyrules'
     policyrule_devices = relationship('PolicyRuleDeviceModel' ) # back_populates='policyrule'
@@ -55,7 +55,7 @@ class PolicyRuleModel(_Base):
             'policyRuleId': self.dump_id(),
             'policyRuleState': {
                 'policyRuleState': self.policyrule_state.value,
-                'policyRuleStateMessage': self.policyrule_state_message,
+                'policyRuleStateMessage': self.policyrule_state_msg,
             },
             'priority': self.policyrule_priority,
         })
@@ -71,7 +71,7 @@ class PolicyRuleDeviceModel(_Base):
     __tablename__ = 'policyrule_device'
 
     policyrule_uuid = Column(ForeignKey('policyrule.policyrule_uuid', ondelete='RESTRICT'), primary_key=True)
-    device_uuid     = Column(ForeignKey('device.device_uuid',         ondelete='RESTRICT'), primary_key=True)
+    device_uuid     = Column(ForeignKey('device.device_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
 
     #policyrule = relationship('PolicyRuleModel', lazy='joined') # back_populates='policyrule_devices'
     device     = relationship('DeviceModel',     lazy='joined') # back_populates='policyrule_devices'
diff --git a/src/context/service/database/models/ServiceModel.py b/src/context/service/database/models/ServiceModel.py
index b581bf900..09ff381b5 100644
--- a/src/context/service/database/models/ServiceModel.py
+++ b/src/context/service/database/models/ServiceModel.py
@@ -25,7 +25,7 @@ class ServiceModel(_Base):
     __tablename__ = 'service'
 
     service_uuid   = Column(UUID(as_uuid=False), primary_key=True)
-    context_uuid   = Column(ForeignKey('context.context_uuid'), nullable=False)
+    context_uuid   = Column(ForeignKey('context.context_uuid'), nullable=False, index=True)
     service_name   = Column(String, nullable=False)
     service_type   = Column(Enum(ORM_ServiceTypeEnum), nullable=False)
     service_status = Column(Enum(ORM_ServiceStatusEnum), nullable=False)
@@ -67,7 +67,7 @@ class ServiceEndPointModel(_Base):
     __tablename__ = 'service_endpoint'
 
     service_uuid  = Column(ForeignKey('service.service_uuid',   ondelete='CASCADE' ), primary_key=True)
-    endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True)
+    endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
 
     service  = relationship('ServiceModel',  back_populates='service_endpoints', lazy='joined')
     endpoint = relationship('EndPointModel', lazy='joined') # back_populates='service_endpoints'
diff --git a/src/context/service/database/models/SliceModel.py b/src/context/service/database/models/SliceModel.py
index 458bc714a..2d6c88416 100644
--- a/src/context/service/database/models/SliceModel.py
+++ b/src/context/service/database/models/SliceModel.py
@@ -24,7 +24,7 @@ class SliceModel(_Base):
     __tablename__ = 'slice'
 
     slice_uuid         = Column(UUID(as_uuid=False), primary_key=True)
-    context_uuid       = Column(ForeignKey('context.context_uuid'), nullable=False)
+    context_uuid       = Column(ForeignKey('context.context_uuid'), nullable=False, index=True)
     slice_name         = Column(String, nullable=True)
     slice_status       = Column(Enum(ORM_SliceStatusEnum), nullable=False)
     slice_owner_uuid   = Column(String, nullable=True)
@@ -81,7 +81,7 @@ class SliceEndPointModel(_Base):
     __tablename__ = 'slice_endpoint'
 
     slice_uuid    = Column(ForeignKey('slice.slice_uuid',       ondelete='CASCADE' ), primary_key=True)
-    endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True)
+    endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
 
     slice    = relationship('SliceModel', back_populates='slice_endpoints', lazy='joined')
     endpoint = relationship('EndPointModel', lazy='joined') # back_populates='slice_endpoints'
@@ -90,7 +90,7 @@ class SliceServiceModel(_Base):
     __tablename__ = 'slice_service'
 
     slice_uuid   = Column(ForeignKey('slice.slice_uuid',     ondelete='CASCADE' ), primary_key=True)
-    service_uuid = Column(ForeignKey('service.service_uuid', ondelete='RESTRICT'), primary_key=True)
+    service_uuid = Column(ForeignKey('service.service_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
 
     slice   = relationship('SliceModel', back_populates='slice_services', lazy='joined')
     service = relationship('ServiceModel', lazy='joined') # back_populates='slice_services'
@@ -98,8 +98,8 @@ class SliceServiceModel(_Base):
 class SliceSubSliceModel(_Base):
     __tablename__ = 'slice_subslice'
 
-    slice_uuid    = Column(ForeignKey('slice.slice_uuid', ondelete='CASCADE'), primary_key=True)
-    subslice_uuid = Column(ForeignKey('slice.slice_uuid', ondelete='CASCADE'), primary_key=True)
+    slice_uuid    = Column(ForeignKey('slice.slice_uuid', ondelete='CASCADE'), primary_key=True, index=True)
+    subslice_uuid = Column(ForeignKey('slice.slice_uuid', ondelete='CASCADE'), primary_key=True, index=True)
 
     slice    = relationship(
         'SliceModel', foreign_keys='SliceSubSliceModel.slice_uuid', back_populates='slice_subslices', lazy='joined')
diff --git a/src/context/service/database/models/TopologyModel.py b/src/context/service/database/models/TopologyModel.py
index 92802e5b2..7dc2333f0 100644
--- a/src/context/service/database/models/TopologyModel.py
+++ b/src/context/service/database/models/TopologyModel.py
@@ -22,7 +22,7 @@ class TopologyModel(_Base):
     __tablename__ = 'topology'
 
     topology_uuid = Column(UUID(as_uuid=False), primary_key=True)
-    context_uuid  = Column(ForeignKey('context.context_uuid'), nullable=False)
+    context_uuid  = Column(ForeignKey('context.context_uuid'), nullable=False, index=True)
     topology_name = Column(String, nullable=False)
     created_at    = Column(DateTime, nullable=False)
     updated_at    = Column(DateTime, nullable=False)
@@ -56,8 +56,8 @@ class TopologyModel(_Base):
 class TopologyDeviceModel(_Base):
     __tablename__ = 'topology_device'
 
-    topology_uuid = Column(ForeignKey('topology.topology_uuid', ondelete='RESTRICT'), primary_key=True)
-    device_uuid   = Column(ForeignKey('device.device_uuid',     ondelete='CASCADE' ), primary_key=True)
+    topology_uuid = Column(ForeignKey('topology.topology_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
+    device_uuid   = Column(ForeignKey('device.device_uuid',     ondelete='CASCADE' ), primary_key=True, index=True)
 
     #topology = relationship('TopologyModel', lazy='joined') # back_populates='topology_devices'
     device   = relationship('DeviceModel',   lazy='joined') # back_populates='topology_devices'
@@ -65,8 +65,8 @@ class TopologyDeviceModel(_Base):
 class TopologyLinkModel(_Base):
     __tablename__ = 'topology_link'
 
-    topology_uuid = Column(ForeignKey('topology.topology_uuid', ondelete='RESTRICT'), primary_key=True)
-    link_uuid     = Column(ForeignKey('link.link_uuid',         ondelete='CASCADE' ), primary_key=True)
+    topology_uuid = Column(ForeignKey('topology.topology_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
+    link_uuid     = Column(ForeignKey('link.link_uuid',         ondelete='CASCADE' ), primary_key=True, index=True)
 
     #topology = relationship('TopologyModel', lazy='joined') # back_populates='topology_links'
     link     = relationship('LinkModel',     lazy='joined') # back_populates='topology_links'
diff --git a/src/context/service/database/models/_Base.py b/src/context/service/database/models/_Base.py
index 973f7b7be..a10de60eb 100644
--- a/src/context/service/database/models/_Base.py
+++ b/src/context/service/database/models/_Base.py
@@ -39,6 +39,9 @@ def create_performance_enhancers(db_engine : sqlalchemy.engine.Engine) -> None:
         index_storing('configrule_slice_uuid_rec_idx', 'configrule', ['slice_uuid'], [
             'device_uuid', 'service_uuid', 'position', 'kind', 'action', 'data', 'created_at', 'updated_at'
         ]),
+        index_storing('connection_service_uuid_rec_idx', 'connection', ['service_uuid'], [
+            'settings', 'created_at', 'updated_at'
+        ]),
         index_storing('constraint_service_uuid_rec_idx', 'constraint', ['service_uuid'], [
             'slice_uuid', 'position', 'kind', 'data', 'created_at', 'updated_at'
         ]),
@@ -48,6 +51,16 @@ def create_performance_enhancers(db_engine : sqlalchemy.engine.Engine) -> None:
         index_storing('endpoint_device_uuid_rec_idx', 'endpoint', ['device_uuid'], [
             'topology_uuid', 'name', 'endpoint_type', 'kpi_sample_types', 'created_at', 'updated_at'
         ]),
+        index_storing('service_context_uuid_rec_idx', 'service', ['context_uuid'], [
+            'service_name', 'service_type', 'service_status', 'created_at', 'updated_at'
+        ]),
+        index_storing('slice_context_uuid_rec_idx', 'slice', ['context_uuid'], [
+            'slice_name', 'slice_status', 'slice_owner_uuid', 'slice_owner_string', 'created_at', 'updated_at'
+        ]),
+
+        index_storing('topology_context_uuid_rec_idx', 'topology', ['context_uuid'], [
+            'topology_name', 'created_at', 'updated_at'
+        ]),
     ]
     def callback(session : Session) -> bool:
         for stmt in statements: session.execute(stmt)
-- 
GitLab


From a6ff6475546773c63d009ac73897dde7c775fb0e Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 21 Feb 2023 16:36:09 +0000
Subject: [PATCH 125/229] Device component - IETF L2VPN Driver:

- Created placeholders to start implementation
---
 .../drivers/ietf_l2vpn/IetfL2VpnDriver.py     | 57 ++++++++++++++-----
 1 file changed, 42 insertions(+), 15 deletions(-)

diff --git a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
index 609221963..68b8090e5 100644
--- a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
+++ b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
@@ -17,16 +17,30 @@ from typing import Any, Iterator, List, Optional, Tuple, Union
 from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
 from common.type_checkers.Checkers import chk_string, chk_type
 from device.service.driver_api._Driver import _Driver, RESOURCE_ENDPOINTS, RESOURCE_SERVICES
-from .Tools import find_key
+from .Tools import connection_point, find_key, wim_mapping
 from .WimconnectorIETFL2VPN import WimconnectorIETFL2VPN
 
 LOGGER = logging.getLogger(__name__)
 
+def process_endpoint(method : str, endpoint : Any) -> Any:
+    LOGGER.warning('[{:s}][process_endpoint] endpoint={:s}'.format(str(method), str(endpoint)))
+    return endpoint
+
+def process_connectivity_service(method : str, service : Any) -> Any:
+    LOGGER.warning('[{:s}][process_connectivity_service] service={:s}'.format(str(method), str(service)))
+    return service
+
+def service_exists(param : Any) -> bool:
+    LOGGER.warning('[service_exists] param={:s}'.format(str(param)))
+    return False
+
 ALL_RESOURCE_KEYS = [
     RESOURCE_ENDPOINTS,
     RESOURCE_SERVICES,
 ]
 
+SERVICE_TYPE = 'ELINE'
+
 METRICS_POOL = MetricsPool('Device', 'Driver', labels={'driver': 'ietf_l2vpn'})
 
 class IetfL2VpnDriver(_Driver):
@@ -39,7 +53,8 @@ class IetfL2VpnDriver(_Driver):
         scheme = settings.get('scheme', 'http')
         wim = {'wim_url': '{:s}://{:s}:{:d}'.format(scheme, address, int(port))}
         wim_account = {'user': username, 'password': password}
-        config = {'mapping_not_needed': False, 'service_endpoint_mapping': mapping}
+        # Mapping updated dynamically with each request
+        config = {'mapping_not_needed': False, 'service_endpoint_mapping': []}
         self.wim = WimconnectorIETFL2VPN(wim, wim_account, config=config)
         self.conn_info = {} # internal database emulating OSM storage provided to WIM Connectors
 
@@ -48,7 +63,7 @@ class IetfL2VpnDriver(_Driver):
             try:
                 self.wim.check_credentials()
             except Exception:  # pylint: disable=broad-except
-                LOGGER.exception('Exception connecting {:s}'.format(str(self.__tapi_root)))
+                LOGGER.exception('Exception checking credentials')
                 return False
             else:
                 self.__started.set()
@@ -78,15 +93,15 @@ class IetfL2VpnDriver(_Driver):
                 if resource_key == RESOURCE_ENDPOINTS:
                     # return endpoints through debug-api and list-devices method
                     endpoints = self.debug_api.get_endpoints()
-                    for endpoint in endpoints: results.append(process_endpoint(endpoint))
+                    for endpoint in endpoints: results.append(process_endpoint('GetConfig', endpoint))
                 elif resource_key == RESOURCE_SERVICES:
                     # return all services through 
                     services = self.wim.get_all_active_connectivity_services()
-                    for service in services: results.append(process_service(service))
+                    for service in services: results.append(process_connectivity_service('GetConfig', service))
                 else:
                     # assume single-service retrieval
                     service = self.wim.get_connectivity_service()
-                    results.append(process_service(service))
+                    results.append(process_connectivity_service('GetConfig', service))
         return results
 
     @metered_subclass_method(METRICS_POOL)
@@ -98,24 +113,34 @@ class IetfL2VpnDriver(_Driver):
             for resource in resources:
                 LOGGER.info('resource = {:s}'.format(str(resource)))
 
-                uuid = find_key(resource, 'uuid')
-                #input_sip = find_key(resource, 'input_sip')
-                #output_sip = find_key(resource, 'output_sip')
+                service_uuid = find_key(resource, 'uuid')
+                a_endpoint = find_key(resource, 'a_endpoint')
+                z_endpoint = find_key(resource, 'z_endpoint')
                 #capacity_value = find_key(resource, 'capacity_value')
                 #capacity_unit = find_key(resource, 'capacity_unit')
                 #layer_protocol_name = find_key(resource, 'layer_protocol_name')
                 #layer_protocol_qualifier = find_key(resource, 'layer_protocol_qualifier')
                 #direction = find_key(resource, 'direction')
+                encapsulation_type = find_key(resource, 'encapsulation_type')
+                vlan_id = find_key(resource, 'vlan_id')
+
+                conn_info = {}
 
                 result = self.wim.get_connectivity_service_status(
                     service_uuid, conn_info=conn_info)
+
+                connection_points = []
+                for endpoint_id in [a_endpoint, z_endpoint]:
+                    site_id = str(endpoint_id)
+                    self.wim.mappings[endpoint_id] = wim_mapping(site_id, endpoint_id)
+                    connection_points.append(connection_point(endpoint_id, encapsulation_type, vlan_id))
                 if service_exists(result):
                     result = self.wim.create_connectivity_service(
-                        service_type, connection_points)
+                        SERVICE_TYPE, connection_points)
                 else:
-                    result = self.wim.edit_connectivity_service(
+                    self.wim.edit_connectivity_service(
                         service_uuid, conn_info=conn_info, connection_points=connection_points)
-                results.extend(process_result(result))
+                results.extend(process_connectivity_service('SetConfig', None))
         return results
 
     @metered_subclass_method(METRICS_POOL)
@@ -126,16 +151,18 @@ class IetfL2VpnDriver(_Driver):
             self.wim.check_credentials()
             for resource in resources:
                 LOGGER.info('resource = {:s}'.format(str(resource)))
-                uuid = find_key(resource, 'uuid')
+                service_uuid = find_key(resource, 'uuid')
+
+                conn_info = {}
 
                 result = self.wim.get_connectivity_service_status(
                     service_uuid, conn_info=conn_info)
                 if service_exists(result):
-                    result = self.wim.delete_connectivity_service(
+                    self.wim.delete_connectivity_service(
                         service_uuid, conn_info=conn_info)
                 else:
                     result = False
-                results.append(process_result(result))
+                results.extend(process_connectivity_service('DeleteConfig', None))
         return results
 
     @metered_subclass_method(METRICS_POOL)
-- 
GitLab


From 7c908a97c049941abdf7a078aa7bf2e0d8ad028a Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 22 Feb 2023 08:22:08 +0000
Subject: [PATCH 126/229] Scenario OFC23 definition

- initial partial definition
---
 TODO.txt                                      |   9 +
 src/tests/ofc23/.gitignore                    |   2 +
 src/tests/ofc23/MultiIngressController.txt    |  23 +++
 src/tests/ofc23/__init__.py                   |  14 ++
 src/tests/ofc23/delete_all.sh                 |  24 +++
 src/tests/ofc23/deploy_all.sh                 |  56 ++++++
 src/tests/ofc23/deploy_specs_child.sh         |  35 ++++
 src/tests/ofc23/deploy_specs_parent.sh        |  35 ++++
 src/tests/ofc23/descriptors/domain1.json      | 148 ++++++++++++++++
 src/tests/ofc23/descriptors/domain2.json      | 166 ++++++++++++++++++
 src/tests/ofc23/descriptors/idc-slice.json    |  20 +++
 src/tests/ofc23/dump_logs.sh                  |  42 +++++
 src/tests/ofc23/fast_redeploy.sh              |  63 +++++++
 .../ofc23/nginx-ingress-controller-child.yaml | 134 ++++++++++++++
 .../nginx-ingress-controller-parent.yaml      | 134 ++++++++++++++
 src/tests/ofc23/show_deploy.sh                |  34 ++++
 src/tests/ofc23/tfs-ingress-child.yaml        |  53 ++++++
 src/tests/ofc23/tfs-ingress-parent.yaml       |  53 ++++++
 18 files changed, 1045 insertions(+)
 create mode 100644 TODO.txt
 create mode 100644 src/tests/ofc23/.gitignore
 create mode 100644 src/tests/ofc23/MultiIngressController.txt
 create mode 100644 src/tests/ofc23/__init__.py
 create mode 100755 src/tests/ofc23/delete_all.sh
 create mode 100755 src/tests/ofc23/deploy_all.sh
 create mode 100755 src/tests/ofc23/deploy_specs_child.sh
 create mode 100755 src/tests/ofc23/deploy_specs_parent.sh
 create mode 100644 src/tests/ofc23/descriptors/domain1.json
 create mode 100644 src/tests/ofc23/descriptors/domain2.json
 create mode 100644 src/tests/ofc23/descriptors/idc-slice.json
 create mode 100755 src/tests/ofc23/dump_logs.sh
 create mode 100755 src/tests/ofc23/fast_redeploy.sh
 create mode 100644 src/tests/ofc23/nginx-ingress-controller-child.yaml
 create mode 100644 src/tests/ofc23/nginx-ingress-controller-parent.yaml
 create mode 100755 src/tests/ofc23/show_deploy.sh
 create mode 100644 src/tests/ofc23/tfs-ingress-child.yaml
 create mode 100644 src/tests/ofc23/tfs-ingress-parent.yaml

diff --git a/TODO.txt b/TODO.txt
new file mode 100644
index 000000000..343d54e28
--- /dev/null
+++ b/TODO.txt
@@ -0,0 +1,9 @@
+- confirm with Hakim everything is in branch hakim-develop-patch-44885
+- merge branch hakim-develop-patch-44885 into feat/device-ietf-l2vpn
+- delete branch hakim-develop-patch-44885
+
+- update OFC'23 to deploy 2 instances without blockchain
+dom1 => parent
+dom2 => child
+dom3/4 => remove
+replace nfvsdn22 => ofc23
diff --git a/src/tests/ofc23/.gitignore b/src/tests/ofc23/.gitignore
new file mode 100644
index 000000000..0a3f4400d
--- /dev/null
+++ b/src/tests/ofc23/.gitignore
@@ -0,0 +1,2 @@
+# Add here your files containing confidential testbed details such as IP addresses, ports, usernames, passwords, etc.
+descriptors_real.json
diff --git a/src/tests/ofc23/MultiIngressController.txt b/src/tests/ofc23/MultiIngressController.txt
new file mode 100644
index 000000000..190e6df74
--- /dev/null
+++ b/src/tests/ofc23/MultiIngressController.txt
@@ -0,0 +1,23 @@
+# Ref: https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress/
+# Ref: https://fabianlee.org/2021/07/29/kubernetes-microk8s-with-multiple-metallb-endpoints-and-nginx-ingress-controllers/
+
+# Check node limits
+kubectl describe nodes
+
+# Create secondary ingress controllers
+kubectl apply -f ofc23/nginx-ingress-controller-parent.yaml
+kubectl apply -f ofc23/nginx-ingress-controller-child.yaml
+
+# Delete secondary ingress controllers
+kubectl delete -f ofc23/nginx-ingress-controller-parent.yaml
+kubectl delete -f ofc23/nginx-ingress-controller-child.yaml
+
+source ofc23/deploy_specs_parent.sh
+./deploy/all.sh
+
+source ofc23/deploy_specs_child.sh
+./deploy/all.sh
+
+# Manually deploy ingresses for instances
+kubectl --namespace tfs-parent apply -f ofc23/tfs-ingress-parent.yaml
+kubectl --namespace tfs-child apply -f ofc23/tfs-ingress-child.yaml
diff --git a/src/tests/ofc23/__init__.py b/src/tests/ofc23/__init__.py
new file mode 100644
index 000000000..1549d9811
--- /dev/null
+++ b/src/tests/ofc23/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
diff --git a/src/tests/ofc23/delete_all.sh b/src/tests/ofc23/delete_all.sh
new file mode 100755
index 000000000..6a838d985
--- /dev/null
+++ b/src/tests/ofc23/delete_all.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# Delete old namespaces
+kubectl delete namespace tfs-dom1 tfs-dom2 tfs-dom3 tfs-dom4 tfs-bchain
+
+# Delete secondary ingress controllers
+kubectl delete -f nfvsdn22/nginx-ingress-controller-dom1.yaml
+kubectl delete -f nfvsdn22/nginx-ingress-controller-dom2.yaml
+kubectl delete -f nfvsdn22/nginx-ingress-controller-dom3.yaml
+kubectl delete -f nfvsdn22/nginx-ingress-controller-dom4.yaml
diff --git a/src/tests/ofc23/deploy_all.sh b/src/tests/ofc23/deploy_all.sh
new file mode 100755
index 000000000..19ea0e6db
--- /dev/null
+++ b/src/tests/ofc23/deploy_all.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# Delete old namespaces
+kubectl delete namespace tfs-dom1 tfs-dom2 tfs-dom3 tfs-dom4
+
+# Delete secondary ingress controllers
+kubectl delete -f nfvsdn22/nginx-ingress-controller-dom1.yaml
+kubectl delete -f nfvsdn22/nginx-ingress-controller-dom2.yaml
+kubectl delete -f nfvsdn22/nginx-ingress-controller-dom3.yaml
+kubectl delete -f nfvsdn22/nginx-ingress-controller-dom4.yaml
+
+# Delete MockBlockchain
+#kubectl delete namespace tfs-bchain
+
+# Create secondary ingress controllers
+kubectl apply -f nfvsdn22/nginx-ingress-controller-dom1.yaml
+kubectl apply -f nfvsdn22/nginx-ingress-controller-dom2.yaml
+kubectl apply -f nfvsdn22/nginx-ingress-controller-dom3.yaml
+kubectl apply -f nfvsdn22/nginx-ingress-controller-dom4.yaml
+
+# Create MockBlockchain
+#./deploy_mock_blockchain.sh
+
+# Deploy TFS for Domain 1
+source nfvsdn22/deploy_specs_dom1.sh
+./deploy.sh
+mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom1.sh
+
+# Deploy TFS for Domain 2
+source nfvsdn22/deploy_specs_dom2.sh
+./deploy.sh
+mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom2.sh
+
+# Deploy TFS for Domain 3
+source nfvsdn22/deploy_specs_dom3.sh
+./deploy.sh
+mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom3.sh
+
+# Deploy TFS for Domain 4
+source nfvsdn22/deploy_specs_dom4.sh
+./deploy.sh
+mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom4.sh
diff --git a/src/tests/ofc23/deploy_specs_child.sh b/src/tests/ofc23/deploy_specs_child.sh
new file mode 100755
index 000000000..bafec4080
--- /dev/null
+++ b/src/tests/ofc23/deploy_specs_child.sh
@@ -0,0 +1,35 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Set the URL of your local Docker registry where the images will be uploaded to.
+export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/"
+
+# Set the list of components, separated by spaces, you want to build images for, and deploy.
+export TFS_COMPONENTS="context device pathcomp service slice webui"
+
+# Set the tag you want to use for your images.
+export TFS_IMAGE_TAG="dev"
+
+# Set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE="tfs-child"
+
+# Set additional manifest files to be applied after the deployment
+export TFS_EXTRA_MANIFESTS="nfvsdn22/tfs-ingress-child.yaml"
+
+# Set the neew Grafana admin password
+export TFS_GRAFANA_PASSWORD="admin123+"
+
+# If not already set, disable skip-build flag.
+# If TFS_SKIP_BUILD is "YES", the containers are not rebuilt-retagged-repushed and existing ones are used.
+export TFS_SKIP_BUILD="YES"
diff --git a/src/tests/ofc23/deploy_specs_parent.sh b/src/tests/ofc23/deploy_specs_parent.sh
new file mode 100755
index 000000000..5c2816c74
--- /dev/null
+++ b/src/tests/ofc23/deploy_specs_parent.sh
@@ -0,0 +1,35 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Set the URL of your local Docker registry where the images will be uploaded to.
+export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/"
+
+# Set the list of components, separated by spaces, you want to build images for, and deploy.
+export TFS_COMPONENTS="context device pathcomp service slice webui"
+
+# Set the tag you want to use for your images.
+export TFS_IMAGE_TAG="dev"
+
+# Set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE="tfs-parent"
+
+# Set additional manifest files to be applied after the deployment
+export TFS_EXTRA_MANIFESTS="nfvsdn22/tfs-ingress-parent.yaml"
+
+# Set the neew Grafana admin password
+export TFS_GRAFANA_PASSWORD="admin123+"
+
+# If not already set, disable skip-build flag.
+# If TFS_SKIP_BUILD is "YES", the containers are not rebuilt-retagged-repushed and existing ones are used.
+export TFS_SKIP_BUILD="NO"
diff --git a/src/tests/ofc23/descriptors/domain1.json b/src/tests/ofc23/descriptors/domain1.json
new file mode 100644
index 000000000..043b3955f
--- /dev/null
+++ b/src/tests/ofc23/descriptors/domain1.json
@@ -0,0 +1,148 @@
+{
+    "contexts": [
+        {
+            "context_id": {"context_uuid": {"uuid": "admin"}},
+            "topology_ids": [
+                {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "D1"}}
+            ], "service_ids": []
+        }
+    ],
+    "topologies": [
+        {
+            "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "D1"}},
+            "device_ids": [
+                {"device_uuid": {"uuid": "DC1"}},
+                {"device_uuid": {"uuid": "R1@D1"}},
+                {"device_uuid": {"uuid": "R2@D1"}},
+                {"device_uuid": {"uuid": "R3@D1"}},
+                {"device_uuid": {"uuid": "R4@D1"}},
+                {"device_uuid": {"uuid": "R5@D1"}}
+            ], "link_ids": [
+                {"link_uuid": {"uuid": "DC1/D1==R1@D1/DC1"}},
+                {"link_uuid": {"uuid": "R1@D1/2==R2@D1/1"}},
+                {"link_uuid": {"uuid": "R2@D1/3==R3@D1/2"}},
+                {"link_uuid": {"uuid": "R2@D1/5==R5@D1/2"}},
+                {"link_uuid": {"uuid": "R3@D1/4==R4@D1/3"}},
+                {"link_uuid": {"uuid": "R4@D1/5==R5@D1/4"}},
+                {"link_uuid": {"uuid": "R5@D1/1==R1@D1/5"}}
+            ]
+        }
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/border", "uuid": "D1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R1@D1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "5"},
+                    {"sample_types": [], "type": "copper/border", "uuid": "DC1"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R2@D1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "3"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "5"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R3@D1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "4"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R4@D1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "3"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "5"},
+                    {"sample_types": [], "type": "copper/border", "uuid": "D2"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R5@D1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "4"},
+                    {"sample_types": [], "type": "copper/border", "uuid": "D3"}
+                ]}}}
+            ]}
+        }
+    ],
+    "links": [
+        {
+            "link_id": {"link_uuid": {"uuid": "DC1/D1==R1@D1/DC1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "D1"}},
+                {"device_id": {"device_uuid": {"uuid": "R1@D1"}}, "endpoint_uuid": {"uuid": "DC1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R1@D1/2==R2@D1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R1@D1"}}, "endpoint_uuid": {"uuid": "2"}},
+                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R2@D1/3==R3@D1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "3"}},
+                {"device_id": {"device_uuid": {"uuid": "R3@D1"}}, "endpoint_uuid": {"uuid": "2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R2@D1/5==R5@D1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "5"}},
+                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R3@D1/4==R4@D1/3"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R3@D1"}}, "endpoint_uuid": {"uuid": "4"}},
+                {"device_id": {"device_uuid": {"uuid": "R4@D1"}}, "endpoint_uuid": {"uuid": "3"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R4@D1/5==R5@D1/4"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R4@D1"}}, "endpoint_uuid": {"uuid": "5"}},
+                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "4"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R5@D1/1==R1@D1/5"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "1"}},
+                {"device_id": {"device_uuid": {"uuid": "R1@D1"}}, "endpoint_uuid": {"uuid": "5"}}
+            ]
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/domain2.json b/src/tests/ofc23/descriptors/domain2.json
new file mode 100644
index 000000000..81d397abf
--- /dev/null
+++ b/src/tests/ofc23/descriptors/domain2.json
@@ -0,0 +1,166 @@
+{
+    "contexts": [
+        {
+            "context_id": {"context_uuid": {"uuid": "admin"}},
+            "topology_ids": [
+                {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "D2"}}
+            ], "service_ids": []
+        }
+    ],
+    "topologies": [
+        {
+            "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "D2"}},
+            "device_ids": [
+                {"device_uuid": {"uuid": "R1@D2"}},
+                {"device_uuid": {"uuid": "R2@D2"}},
+                {"device_uuid": {"uuid": "R3@D2"}},
+                {"device_uuid": {"uuid": "R4@D2"}},
+                {"device_uuid": {"uuid": "R5@D2"}},
+                {"device_uuid": {"uuid": "R6@D2"}}
+            ], "link_ids": [
+                {"link_uuid": {"uuid": "R1@D2/2==R2@D2/1"}},
+                {"link_uuid": {"uuid": "R1@D2/6==R6@D2/1"}},
+                {"link_uuid": {"uuid": "R1@D2/5==R5@D2/1"}},
+                {"link_uuid": {"uuid": "R2@D2/3==R3@D2/2"}},
+                {"link_uuid": {"uuid": "R2@D2/4==R4@D2/2"}},
+                {"link_uuid": {"uuid": "R2@D2/5==R5@D2/2"}},
+                {"link_uuid": {"uuid": "R2@D2/6==R6@D2/2"}},
+                {"link_uuid": {"uuid": "R3@D2/6==R6@D2/3"}},
+                {"link_uuid": {"uuid": "R4@D2/5==R5@D2/4"}}
+            ]
+        }
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "R1@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "5"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "6"},
+                    {"sample_types": [], "type": "copper/border", "uuid": "D1"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R2@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "3"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "4"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "5"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "6"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R3@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "6"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R4@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "5"},
+                    {"sample_types": [], "type": "copper/border", "uuid": "D4"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R5@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "4"},
+                    {"sample_types": [], "type": "copper/border", "uuid": "D3"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R6@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "3"}
+                ]}}}
+            ]}
+        }
+    ],
+    "links": [
+        {
+            "link_id": {"link_uuid": {"uuid": "R1@D2/2==R2@D2/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R1@D2"}}, "endpoint_uuid": {"uuid": "2"}},
+                {"device_id": {"device_uuid": {"uuid": "R2@D2"}}, "endpoint_uuid": {"uuid": "1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R1@D2/6==R6@D2/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R1@D2"}}, "endpoint_uuid": {"uuid": "6"}},
+                {"device_id": {"device_uuid": {"uuid": "R6@D2"}}, "endpoint_uuid": {"uuid": "1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R1@D2/5==R5@D2/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R1@D2"}}, "endpoint_uuid": {"uuid": "5"}},
+                {"device_id": {"device_uuid": {"uuid": "R5@D2"}}, "endpoint_uuid": {"uuid": "1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R2@D2/3==R3@D2/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2@D2"}}, "endpoint_uuid": {"uuid": "3"}},
+                {"device_id": {"device_uuid": {"uuid": "R3@D2"}}, "endpoint_uuid": {"uuid": "2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R2@D2/4==R4@D2/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2@D2"}}, "endpoint_uuid": {"uuid": "4"}},
+                {"device_id": {"device_uuid": {"uuid": "R4@D2"}}, "endpoint_uuid": {"uuid": "2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R2@D2/5==R5@D2/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2@D2"}}, "endpoint_uuid": {"uuid": "5"}},
+                {"device_id": {"device_uuid": {"uuid": "R5@D2"}}, "endpoint_uuid": {"uuid": "2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R2@D2/6==R6@D2/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2@D2"}}, "endpoint_uuid": {"uuid": "6"}},
+                {"device_id": {"device_uuid": {"uuid": "R6@D2"}}, "endpoint_uuid": {"uuid": "2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R3@D2/6==R6@D2/3"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R3@D2"}}, "endpoint_uuid": {"uuid": "6"}},
+                {"device_id": {"device_uuid": {"uuid": "R6@D2"}}, "endpoint_uuid": {"uuid": "3"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R4@D2/5==R5@D2/4"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R4@D2"}}, "endpoint_uuid": {"uuid": "5"}},
+                {"device_id": {"device_uuid": {"uuid": "R5@D2"}}, "endpoint_uuid": {"uuid": "4"}}
+            ]
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/idc-slice.json b/src/tests/ofc23/descriptors/idc-slice.json
new file mode 100644
index 000000000..634209284
--- /dev/null
+++ b/src/tests/ofc23/descriptors/idc-slice.json
@@ -0,0 +1,20 @@
+{
+    "slices":[
+        {
+            "slice_id":{"context_id":{"context_uuid":{"uuid":"admin"}},"slice_uuid":{"uuid":"idc-slice"}},
+            "slice_endpoint_ids":[
+                {"device_id":{"device_uuid":{"uuid":"DC1"}},"endpoint_uuid":{"uuid":"int"}},
+                {"device_id":{"device_uuid":{"uuid":"DC2"}},"endpoint_uuid":{"uuid":"int"}}
+            ],
+            "slice_status":{"slice_status":1},
+            "slice_service_ids":[],
+            "slice_subslice_ids":[],
+            "slice_constraints":[],
+            "slice_config":{"config_rules":[
+                {"action":1,"custom":{"resource_key":"/settings","resource_value":"{}"}},
+                {"action":1,"custom":{"resource_key":"/device[DC1]/endpoint[int]/settings","resource_value":"{}"}},
+                {"action":1,"custom":{"resource_key":"/device[DC2]/endpoint[int]/settings","resource_value":"{}"}}
+            ]}
+        }
+    ]
+}
diff --git a/src/tests/ofc23/dump_logs.sh b/src/tests/ofc23/dump_logs.sh
new file mode 100755
index 000000000..533879c2a
--- /dev/null
+++ b/src/tests/ofc23/dump_logs.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+rm -rf tmp/exec
+
+echo "Collecting logs for Parent..."
+mkdir -p tmp/exec/parent
+kubectl --namespace tfs-parent logs deployments/contextservice server > tmp/exec/parent/context.log
+kubectl --namespace tfs-parent logs deployments/deviceservice server > tmp/exec/parent/device.log
+kubectl --namespace tfs-parent logs deployments/serviceservice server > tmp/exec/parent/service.log
+kubectl --namespace tfs-parent logs deployments/pathcompservice frontend > tmp/exec/parent/pathcomp-frontend.log
+kubectl --namespace tfs-parent logs deployments/pathcompservice backend > tmp/exec/parent/pathcomp-backend.log
+kubectl --namespace tfs-parent logs deployments/sliceservice server > tmp/exec/parent/slice.log
+printf "\n"
+
+echo "Collecting logs for Child..."
+mkdir -p tmp/exec/child
+kubectl --namespace tfs-child logs deployments/contextservice server > tmp/exec/child/context.log
+kubectl --namespace tfs-child logs deployments/deviceservice server > tmp/exec/child/device.log
+kubectl --namespace tfs-child logs deployments/serviceservice server > tmp/exec/child/service.log
+kubectl --namespace tfs-child logs deployments/pathcompservice frontend > tmp/exec/child/pathcomp-frontend.log
+kubectl --namespace tfs-child logs deployments/pathcompservice backend > tmp/exec/child/pathcomp-backend.log
+kubectl --namespace tfs-child logs deployments/sliceservice server > tmp/exec/child/slice.log
+kubectl --namespace tfs-child logs deployments/interdomainservice server > tmp/exec/child/interdomain.log
+kubectl --namespace tfs-child logs deployments/dltservice connector > tmp/exec/child/dlt-connector.log
+kubectl --namespace tfs-child logs deployments/dltservice gateway > tmp/exec/child/dlt-gateway.log
+printf "\n"
+
+echo "Done!"
diff --git a/src/tests/ofc23/fast_redeploy.sh b/src/tests/ofc23/fast_redeploy.sh
new file mode 100755
index 000000000..3c942a799
--- /dev/null
+++ b/src/tests/ofc23/fast_redeploy.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+kubectl delete namespace tfs-parent tfs-child
+
+echo "Deploying tfs-parent ..."
+kubectl delete -f nfvsdn22/nginx-ingress-controller-parent.yaml                 > ./tmp/logs/deploy-tfs-parent.log
+kubectl create namespace tfs-parent                                             > ./tmp/logs/deploy-tfs-parent.log
+kubectl apply -f nfvsdn22/nginx-ingress-controller-parent.yaml                  > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/contextservice.yaml     > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/deviceservice.yaml      > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/pathcompservice.yaml    > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/serviceservice.yaml     > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/sliceservice.yaml       > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/webuiservice.yaml       > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f nfvsdn22/tfs-ingress-parent.yaml        > ./tmp/logs/deploy-tfs-parent.log
+printf "\n"
+
+echo "Deploying tfs-child ..."
+kubectl delete -f nfvsdn22/nginx-ingress-controller-child.yaml                 > ./tmp/logs/deploy-tfs-child.log
+kubectl create namespace tfs-child                                             > ./tmp/logs/deploy-tfs-child.log
+kubectl apply -f nfvsdn22/nginx-ingress-controller-child.yaml                  > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/contextservice.yaml     > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/deviceservice.yaml      > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/pathcompservice.yaml    > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/serviceservice.yaml     > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/sliceservice.yaml       > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/webuiservice.yaml       > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f nfvsdn22/tfs-ingress-child.yaml         > ./tmp/logs/deploy-tfs-child.log
+printf "\n"
+
+echo "Waiting tfs-parent ..."
+kubectl wait --namespace tfs-parent --for='condition=available' --timeout=300s deployment/contextservice
+kubectl wait --namespace tfs-parent --for='condition=available' --timeout=300s deployment/deviceservice
+kubectl wait --namespace tfs-parent --for='condition=available' --timeout=300s deployment/pathcompservice
+kubectl wait --namespace tfs-parent --for='condition=available' --timeout=300s deployment/serviceservice
+kubectl wait --namespace tfs-parent --for='condition=available' --timeout=300s deployment/sliceservice
+kubectl wait --namespace tfs-parent --for='condition=available' --timeout=300s deployment/webuiservice
+printf "\n"
+
+echo "Waiting tfs-child ..."
+kubectl wait --namespace tfs-child --for='condition=available' --timeout=300s deployment/contextservice
+kubectl wait --namespace tfs-child --for='condition=available' --timeout=300s deployment/deviceservice
+kubectl wait --namespace tfs-child --for='condition=available' --timeout=300s deployment/pathcompservice
+kubectl wait --namespace tfs-child --for='condition=available' --timeout=300s deployment/serviceservice
+kubectl wait --namespace tfs-child --for='condition=available' --timeout=300s deployment/sliceservice
+kubectl wait --namespace tfs-child --for='condition=available' --timeout=300s deployment/webuiservice
+printf "\n"
+
+echo "Done!"
diff --git a/src/tests/ofc23/nginx-ingress-controller-child.yaml b/src/tests/ofc23/nginx-ingress-controller-child.yaml
new file mode 100644
index 000000000..00a64d75e
--- /dev/null
+++ b/src/tests/ofc23/nginx-ingress-controller-child.yaml
@@ -0,0 +1,134 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: nginx-load-balancer-microk8s-conf-child
+  namespace: ingress
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: nginx-ingress-udp-microk8s-conf-child
+  namespace: ingress
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: nginx-ingress-tcp-microk8s-conf-child
+  namespace: ingress
+---
+apiVersion: networking.k8s.io/v1
+kind: IngressClass
+metadata:
+  name: tfs-ingress-class-child
+  annotations:
+    ingressclass.kubernetes.io/is-default-class: "false"
+spec:
+  controller: tfs.etsi.org/controller-class-child
+---
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+  name: nginx-ingress-microk8s-controller-child
+  namespace: ingress
+  labels:
+    microk8s-application: nginx-ingress-microk8s-child
+spec:
+  selector:
+    matchLabels:
+      name: nginx-ingress-microk8s-child
+  updateStrategy:
+    rollingUpdate:
+      maxSurge: 0
+      maxUnavailable: 1
+    type: RollingUpdate
+  template:
+    metadata:
+      labels:
+        name: nginx-ingress-microk8s-child
+    spec:
+      terminationGracePeriodSeconds: 60
+      restartPolicy: Always
+      serviceAccountName: nginx-ingress-microk8s-serviceaccount
+      containers:
+      - image: k8s.gcr.io/ingress-nginx/controller:v1.2.0
+        imagePullPolicy: IfNotPresent
+        name: nginx-ingress-microk8s
+        livenessProbe:
+          httpGet:
+            path: /healthz
+            port: 10254
+            scheme: HTTP
+          initialDelaySeconds: 10
+          periodSeconds: 10
+          successThreshold: 1
+          failureThreshold: 3
+          timeoutSeconds: 5
+        readinessProbe:
+          httpGet:
+            path: /healthz
+            port: 10254
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          failureThreshold: 3
+          timeoutSeconds: 5
+        lifecycle:
+          preStop:
+            exec:
+              command:
+                - /wait-shutdown
+        securityContext:
+          capabilities:
+            add:
+            - NET_BIND_SERVICE
+            drop:
+            - ALL
+          runAsUser: 101 # www-data
+        env:
+          - name: POD_NAME
+            valueFrom:
+              fieldRef:
+                apiVersion: v1
+                fieldPath: metadata.name
+          - name: POD_NAMESPACE
+            valueFrom:
+              fieldRef:
+                apiVersion: v1
+                fieldPath: metadata.namespace
+        ports:
+        - name: http
+          containerPort: 80
+          hostPort: 8002
+          protocol: TCP
+        - name: https
+          containerPort: 443
+          hostPort: 4432
+          protocol: TCP
+        - name: health
+          containerPort: 10254
+          hostPort: 12542
+          protocol: TCP
+        args:
+        - /nginx-ingress-controller
+        - --configmap=$(POD_NAMESPACE)/nginx-load-balancer-microk8s-conf-child
+        - --tcp-services-configmap=$(POD_NAMESPACE)/nginx-ingress-tcp-microk8s-conf-child
+        - --udp-services-configmap=$(POD_NAMESPACE)/nginx-ingress-udp-microk8s-conf-child
+        - --election-id=ingress-controller-leader-child
+        - --controller-class=tfs.etsi.org/controller-class-child
+        - --ingress-class=tfs-ingress-class-child
+        - ' '
+        - --publish-status-address=127.0.0.1
diff --git a/src/tests/ofc23/nginx-ingress-controller-parent.yaml b/src/tests/ofc23/nginx-ingress-controller-parent.yaml
new file mode 100644
index 000000000..c504c2e67
--- /dev/null
+++ b/src/tests/ofc23/nginx-ingress-controller-parent.yaml
@@ -0,0 +1,134 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: nginx-load-balancer-microk8s-conf-parent
+  namespace: ingress
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: nginx-ingress-udp-microk8s-conf-parent
+  namespace: ingress
+---
+apiVersion: v1
+kind: ConfigMap
+metadata:
+  name: nginx-ingress-tcp-microk8s-conf-parent
+  namespace: ingress
+---
+apiVersion: networking.k8s.io/v1
+kind: IngressClass
+metadata:
+  name: tfs-ingress-class-parent
+  annotations:
+    ingressclass.kubernetes.io/is-default-class: "false"
+spec:
+  controller: tfs.etsi.org/controller-class-parent
+---
+apiVersion: apps/v1
+kind: DaemonSet
+metadata:
+  name: nginx-ingress-microk8s-controller-parent
+  namespace: ingress
+  labels:
+    microk8s-application: nginx-ingress-microk8s-parent
+spec:
+  selector:
+    matchLabels:
+      name: nginx-ingress-microk8s-parent
+  updateStrategy:
+    rollingUpdate:
+      maxSurge: 0
+      maxUnavailable: 1
+    type: RollingUpdate
+  template:
+    metadata:
+      labels:
+        name: nginx-ingress-microk8s-parent
+    spec:
+      terminationGracePeriodSeconds: 60
+      restartPolicy: Always
+      serviceAccountName: nginx-ingress-microk8s-serviceaccount
+      containers:
+      - image: k8s.gcr.io/ingress-nginx/controller:v1.2.0
+        imagePullPolicy: IfNotPresent
+        name: nginx-ingress-microk8s
+        livenessProbe:
+          httpGet:
+            path: /healthz
+            port: 10254
+            scheme: HTTP
+          initialDelaySeconds: 10
+          periodSeconds: 10
+          successThreshold: 1
+          failureThreshold: 3
+          timeoutSeconds: 5
+        readinessProbe:
+          httpGet:
+            path: /healthz
+            port: 10254
+            scheme: HTTP
+          periodSeconds: 10
+          successThreshold: 1
+          failureThreshold: 3
+          timeoutSeconds: 5
+        lifecycle:
+          preStop:
+            exec:
+              command:
+                - /wait-shutdown
+        securityContext:
+          capabilities:
+            add:
+            - NET_BIND_SERVICE
+            drop:
+            - ALL
+          runAsUser: 101 # www-data
+        env:
+          - name: POD_NAME
+            valueFrom:
+              fieldRef:
+                apiVersion: v1
+                fieldPath: metadata.name
+          - name: POD_NAMESPACE
+            valueFrom:
+              fieldRef:
+                apiVersion: v1
+                fieldPath: metadata.namespace
+        ports:
+        - name: http
+          containerPort: 80
+          hostPort: 8001
+          protocol: TCP
+        - name: https
+          containerPort: 443
+          hostPort: 4431
+          protocol: TCP
+        - name: health
+          containerPort: 10254
+          hostPort: 12541
+          protocol: TCP
+        args:
+        - /nginx-ingress-controller
+        - --configmap=$(POD_NAMESPACE)/nginx-load-balancer-microk8s-conf-parent
+        - --tcp-services-configmap=$(POD_NAMESPACE)/nginx-ingress-tcp-microk8s-conf-parent
+        - --udp-services-configmap=$(POD_NAMESPACE)/nginx-ingress-udp-microk8s-conf-parent
+        - --election-id=ingress-controller-leader-parent
+        - --controller-class=tfs.etsi.org/controller-class-parent
+        - --ingress-class=tfs-ingress-class-parent
+        - ' '
+        - --publish-status-address=127.0.0.1
diff --git a/src/tests/ofc23/show_deploy.sh b/src/tests/ofc23/show_deploy.sh
new file mode 100755
index 000000000..d4e112b0f
--- /dev/null
+++ b/src/tests/ofc23/show_deploy.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+echo "Deployment Resources:"
+kubectl --namespace tfs-parent get all
+printf "\n"
+
+echo "Deployment Ingress:"
+kubectl --namespace tfs-parent get ingress
+printf "\n"
+
+echo "Deployment Resources:"
+kubectl --namespace tfs-child get all
+printf "\n"
+
+echo "Deployment Ingress:"
+kubectl --namespace tfs-child get ingress
+printf "\n"
diff --git a/src/tests/ofc23/tfs-ingress-child.yaml b/src/tests/ofc23/tfs-ingress-child.yaml
new file mode 100644
index 000000000..a93b9321c
--- /dev/null
+++ b/src/tests/ofc23/tfs-ingress-child.yaml
@@ -0,0 +1,53 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: tfs-ingress-child
+  annotations:
+    nginx.ingress.kubernetes.io/rewrite-target: /$2
+spec:
+  ingressClassName: tfs-ingress-class-child
+  rules:
+  - http:
+      paths:
+        - path: /webui(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: webuiservice
+              port:
+                number: 8004
+        - path: /grafana(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: webuiservice
+              port:
+                number: 3000
+        - path: /context(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: contextservice
+              port:
+                number: 8080
+        - path: /()(restconf/.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: computeservice
+              port:
+                number: 8080
diff --git a/src/tests/ofc23/tfs-ingress-parent.yaml b/src/tests/ofc23/tfs-ingress-parent.yaml
new file mode 100644
index 000000000..baf506dd9
--- /dev/null
+++ b/src/tests/ofc23/tfs-ingress-parent.yaml
@@ -0,0 +1,53 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: tfs-ingress-parent
+  annotations:
+    nginx.ingress.kubernetes.io/rewrite-target: /$2
+spec:
+  ingressClassName: tfs-ingress-class-parent
+  rules:
+  - http:
+      paths:
+        - path: /webui(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: webuiservice
+              port:
+                number: 8004
+        - path: /grafana(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: webuiservice
+              port:
+                number: 3000
+        - path: /context(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: contextservice
+              port:
+                number: 8080
+        - path: /()(restconf/.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: computeservice
+              port:
+                number: 8080
-- 
GitLab


From 09b442f22aa2a1ae08cec291462d8ad5ad845fbb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Juan=20Pedre=C3=B1o=20Manresa?=
 <jpedrenomanresa@adva.com>
Date: Wed, 22 Feb 2023 08:31:29 +0000
Subject: [PATCH 127/229] Bug fixes in IETF entry point and parsing. Added SLA
 availability as percentage.

---
 .../ietf_network_slice/NSS_Services.py        | 23 +++++++++++--------
 .../ietf_network_slice/__init__.py            |  3 +--
 2 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
index 987dbb2cd..df19f9e4a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
@@ -75,10 +75,11 @@ class NSS_Services(Resource):
                         if cc.slo_sle_policy.custom:
                             with cc.slo_sle_policy.custom as slo:
                                 for metric_bound in slo.service_slo_sle_policy().metric_bounds().metric_bound:
-                                    if "service-slo-two-way-bandwidth" in str(metric_bound.metric_type()).casefold(): # TODO fix to two way!
+                                    metric_type = str(metric_bound.metric_type()).casefold()
+                                    if metric_type == "service-slo-two-way-bandwidth":  # TODO fix to two way!
                                         constraint = Constraint()
                                         metric_unit = metric_bound.metric_unit().casefold()
-                                        capacity = float(metric_bound.value_description()) # Assuming capacity already in Gbps
+                                        capacity = float(metric_bound.bound())  # Assuming capacity already in Gbps
                                         if metric_unit == "mbps":
                                             capacity /= 1E3
                                         elif metric_unit != "gbps":
@@ -88,9 +89,9 @@ class NSS_Services(Resource):
                                         constraint.sla_capacity.capacity_gbps = capacity
                                         list_constraints.append(constraint)
 
-                                    elif "service-slo-one-way-delay" in str(metric_bound.metric_type()).casefold():
+                                    elif metric_type == "service-slo-one-way-delay":
                                         if metric_bound.metric_unit().casefold() == "ms":
-                                            latency = float(metric_bound.value_description())
+                                            latency = int(metric_bound.bound())
                                         else:
                                             LOGGER.warning(f"Invalided metric unit ({metric_bound.metric_unit()}), must be \"ms\" ")
                                             response.status_code = HTTP_SERVERERROR
@@ -99,13 +100,17 @@ class NSS_Services(Resource):
                                         constraint.sla_latency.e2e_latency_ms = latency
                                         list_constraints.append(constraint)
 
-                                    elif "service-slo-availability":
-                                        # TODO map to an availability number (or use a custom identity definition)
+                                    elif metric_type == "service-slo-availability":
+                                        availability = float(metric_bound.bound())
+                                        if availability > 100.0 or availability < 0.0:
+                                            raise Exception(f'Slice SLO availability ({availability}) must be constrained [0,100]')
                                         constraint = Constraint()
-                                        constraint.sla_availability.num_disjoint_paths = 2
-                                        constraint.sla_availability.all_active = True
+                                        constraint.sla_availability.availability = availability
+                                        list_constraints.append(constraint)
+
             slice_request.slice_constraints.extend(list_constraints)
+            LOGGER.debug(grpc_message_to_json(slice_request))  # TODO remove
             slice_client = SliceClient()
             slice_client.CreateSlice(slice_request)
-            LOGGER.debug(grpc_message_to_json(slice_request)) # TODO remove
+
         return response
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py
index aa45206cd..5b7ac27d5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py
@@ -20,7 +20,7 @@ from compute.service.rest_server.RestServer import RestServer
 from .NSS_Services import NSS_Services
 from .NSS_Service import NSS_Service
 
-URL_PREFIX = '/ietf-network-slice-service:ietf-nss'
+URL_PREFIX = '/data/ietf-network-slice-service:ietf-nss'
 
 def _add_resource(rest_server : RestServer, resource : Resource, *urls, **kwargs):
     urls = [(URL_PREFIX + url) for url in urls]
@@ -29,4 +29,3 @@ def _add_resource(rest_server : RestServer, resource : Resource, *urls, **kwargs
 def register_ietf_nss(rest_server : RestServer):
     _add_resource(rest_server, NSS_Services, '/network-slice-services')
     _add_resource(rest_server, NSS_Service, '/network-slice-services/slice-service=<string:slice_id>')
-    
\ No newline at end of file
-- 
GitLab


From 4e76efa63443cfabc7f336992e233c336c72963a Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Wed, 22 Feb 2023 14:59:47 +0100
Subject: [PATCH 128/229] L3VPN policies

---
 .../service/service_handlers/l3nm_openconfig/ConfigRules.py   | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
index 8862ac8dc..351efe5a5 100644
--- a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
@@ -204,8 +204,8 @@ def teardown_config_rules(
     vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     #address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     #address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
-    policy_import       = json_endpoint_settings.get('policy_1',            '2'      )  # 2
-    policy_export       = json_endpoint_settings.get('policy_2',            '7'      )  # 30
+    policy_import       = json_endpoint_settings.get('policy_AZ',            '2'      )  # 2
+    policy_export       = json_endpoint_settings.get('policy_ZA',            '7'      )  # 30
 
     if_subif_name             = '{:s}.{:d}'.format(endpoint_name, vlan_id)
 
-- 
GitLab


From 76c911ac8ac1cbad6005c83cc4cef17cebf0860a Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 22 Feb 2023 16:00:38 +0000
Subject: [PATCH 129/229] Deploy Scripts:

- Added settings to define custom port numbers where dependencies should be exposed.
- Corrected order of commands in dependency deploy scripts
- Extended NATS deployment to support multiple instances
- Extended TFS deployment to support configuration of multiple Grafana instances
- Removed constraint of installing monitoring component to deploy Grafana
- Updated example my_deploy.sh
---
 deploy/all.sh  | 21 +++++++++++++++++++
 deploy/crdb.sh | 57 ++++++++++++++++++++++++++++++--------------------
 deploy/nats.sh | 36 ++++++++++++++++++-------------
 deploy/qdb.sh  | 40 ++++++++++++++++++++++-------------
 deploy/tfs.sh  | 31 ++++++++++++++++++++++++---
 my_deploy.sh   | 25 ++++++++++++++++++++--
 6 files changed, 153 insertions(+), 57 deletions(-)

diff --git a/deploy/all.sh b/deploy/all.sh
index 6f5592cb4..6f8331b76 100755
--- a/deploy/all.sh
+++ b/deploy/all.sh
@@ -51,6 +51,12 @@ export TFS_SKIP_BUILD=${TFS_SKIP_BUILD:-""}
 # If not already set, set the namespace where CockroackDB will be deployed.
 export CRDB_NAMESPACE=${CRDB_NAMESPACE:-"crdb"}
 
+# If not already set, set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL=${CRDB_EXT_PORT_SQL:-"26257"}
+
+# If not already set, set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP=${CRDB_EXT_PORT_HTTP:-"8081"}
+
 # If not already set, set the database username to be used by Context.
 export CRDB_USERNAME=${CRDB_USERNAME:-"tfs"}
 
@@ -90,6 +96,12 @@ export CRDB_REDEPLOY=${CRDB_REDEPLOY:-""}
 # If not already set, set the namespace where NATS will be deployed.
 export NATS_NAMESPACE=${NATS_NAMESPACE:-"nats"}
 
+# If not already set, set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT=${NATS_EXT_PORT_CLIENT:-"4222"}
+
+# If not already set, set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP=${NATS_EXT_PORT_HTTP:-"8222"}
+
 # If not already set, disable flag for re-deploying NATS from scratch.
 # WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE MESSAGE BROKER INFORMATION!
 # If NATS_REDEPLOY is "YES", the message broker will be dropped while checking/deploying NATS.
@@ -101,6 +113,15 @@ export NATS_REDEPLOY=${NATS_REDEPLOY:-""}
 # If not already set, set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE=${QDB_NAMESPACE:-"qdb"}
 
+# If not already set, set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL=${QDB_EXT_PORT_SQL:-"8812"}
+
+# If not already set, set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP=${QDB_EXT_PORT_ILP:-"9009"}
+
+# If not already set, set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP=${QDB_EXT_PORT_HTTP:-"9000"}
+
 # If not already set, set the database username to be used for QuestDB.
 export QDB_USERNAME=${QDB_USERNAME:-"admin"}
 
diff --git a/deploy/crdb.sh b/deploy/crdb.sh
index 4e8cfe2c3..216339117 100755
--- a/deploy/crdb.sh
+++ b/deploy/crdb.sh
@@ -21,6 +21,12 @@
 # If not already set, set the namespace where CockroackDB will be deployed.
 export CRDB_NAMESPACE=${CRDB_NAMESPACE:-"crdb"}
 
+# If not already set, set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL=${CRDB_EXT_PORT_SQL:-"26257"}
+
+# If not already set, set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP=${CRDB_EXT_PORT_HTTP:-"8081"}
+
 # If not already set, set the database username to be used by Context.
 export CRDB_USERNAME=${CRDB_USERNAME:-"tfs"}
 
@@ -109,24 +115,23 @@ function crdb_deploy_single() {
     echo
 
     echo "CockroachDB Port Mapping"
-    echo ">>> Expose CockroachDB SQL port (26257->26257)"
-    CRDB_SQL_PORT=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
-    PATCH='{"data": {"'${CRDB_SQL_PORT}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_SQL_PORT}'"}}'
+    echo ">>> Expose CockroachDB SQL port (26257->${CRDB_EXT_PORT_SQL})"
+    CRDB_PORT_SQL=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
+    PATCH='{"data": {"'${CRDB_EXT_PORT_SQL}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_PORT_SQL}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${CRDB_SQL_PORT}', "hostPort": '${CRDB_SQL_PORT}'}'
+    PORT_MAP='{"containerPort": '${CRDB_EXT_PORT_SQL}', "hostPort": '${CRDB_EXT_PORT_SQL}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
     echo
 
-    echo ">>> Expose CockroachDB HTTP Mgmt GUI port (8080->8081)"
-    CRDB_GUI_PORT_EXT="8081"
-    CRDB_GUI_PORT=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
-    PATCH='{"data": {"'${CRDB_GUI_PORT_EXT}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_GUI_PORT}'"}}'
+    echo ">>> Expose CockroachDB HTTP Mgmt GUI port (8080->${CRDB_EXT_PORT_HTTP})"
+    CRDB_PORT_HTTP=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
+    PATCH='{"data": {"'${CRDB_EXT_PORT_HTTP}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_PORT_HTTP}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${CRDB_GUI_PORT_EXT}', "hostPort": '${CRDB_GUI_PORT_EXT}'}'
+    PORT_MAP='{"containerPort": '${CRDB_EXT_PORT_HTTP}', "hostPort": '${CRDB_EXT_PORT_HTTP}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
@@ -153,7 +158,8 @@ function crdb_undeploy_single() {
 
 function crdb_drop_database_single() {
     echo "Drop database if exists"
-    CRDB_CLIENT_URL="postgresql://${CRDB_USERNAME}:${CRDB_PASSWORD}@cockroachdb-0:${CRDB_SQL_PORT}/defaultdb?sslmode=require"
+    CRDB_PORT_SQL=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
+    CRDB_CLIENT_URL="postgresql://${CRDB_USERNAME}:${CRDB_PASSWORD}@cockroachdb-0:${CRDB_PORT_SQL}/defaultdb?sslmode=require"
     kubectl exec -it --namespace ${CRDB_NAMESPACE} cockroachdb-0 -- \
         ./cockroach sql --certs-dir=/cockroach/cockroach-certs --url=${CRDB_CLIENT_URL} \
         --execute "DROP DATABASE IF EXISTS ${CRDB_DATABASE};"
@@ -263,24 +269,23 @@ function crdb_deploy_cluster() {
     echo
 
     echo "CockroachDB Port Mapping"
-    echo ">>> Expose CockroachDB SQL port (26257)"
-    CRDB_SQL_PORT=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
-    PATCH='{"data": {"'${CRDB_SQL_PORT}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_SQL_PORT}'"}}'
+    echo ">>> Expose CockroachDB SQL port (26257->${CRDB_EXT_PORT_SQL})"
+    CRDB_PORT_SQL=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
+    PATCH='{"data": {"'${CRDB_EXT_PORT_SQL}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_PORT_SQL}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${CRDB_SQL_PORT}', "hostPort": '${CRDB_SQL_PORT}'}'
+    PORT_MAP='{"containerPort": '${CRDB_EXT_PORT_SQL}', "hostPort": '${CRDB_EXT_PORT_SQL}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
     echo
 
-    echo ">>> Expose CockroachDB HTTP Mgmt GUI port (8080->8081)"
-    CRDB_GUI_PORT_EXT="8081"
-    CRDB_GUI_PORT=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
-    PATCH='{"data": {"'${CRDB_GUI_PORT_EXT}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_GUI_PORT}'"}}'
+    echo ">>> Expose CockroachDB HTTP Mgmt GUI port (8080->${CRDB_EXT_PORT_HTTP})"
+    CRDB_PORT_HTTP=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
+    PATCH='{"data": {"'${CRDB_EXT_PORT_HTTP}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_PORT_HTTP}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${CRDB_GUI_PORT_EXT}', "hostPort": '${CRDB_GUI_PORT_EXT}'}'
+    PORT_MAP='{"containerPort": '${CRDB_EXT_PORT_HTTP}', "hostPort": '${CRDB_EXT_PORT_HTTP}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
@@ -342,17 +347,23 @@ function crdb_drop_database_cluster() {
 if [ "$CRDB_DEPLOY_MODE" == "single" ]; then
     if [ "$CRDB_REDEPLOY" == "YES" ]; then
         crdb_undeploy_single
-    elif [ "$CRDB_DROP_DATABASE_IF_EXISTS" == "YES" ]; then
-        crdb_drop_database_single
     fi
+
     crdb_deploy_single
+
+    if [ "$CRDB_DROP_DATABASE_IF_EXISTS" == "YES" ]; then
+        crdb_drop_database_single
+    fi
 elif [ "$CRDB_DEPLOY_MODE" == "cluster" ]; then
     if [ "$CRDB_REDEPLOY" == "YES" ]; then
         crdb_undeploy_cluster
-    elif [ "$CRDB_DROP_DATABASE_IF_EXISTS" == "YES" ]; then
-        crdb_drop_database_cluster
     fi
+
     crdb_deploy_cluster
+
+    if [ "$CRDB_DROP_DATABASE_IF_EXISTS" == "YES" ]; then
+        crdb_drop_database_cluster
+    fi
 else
     echo "Unsupported value: CRDB_DEPLOY_MODE=$CRDB_DEPLOY_MODE"
 fi
diff --git a/deploy/nats.sh b/deploy/nats.sh
index 9edbc7765..aa082b54b 100755
--- a/deploy/nats.sh
+++ b/deploy/nats.sh
@@ -21,6 +21,12 @@
 # If not already set, set the namespace where NATS will be deployed.
 export NATS_NAMESPACE=${NATS_NAMESPACE:-"nats"}
 
+# If not already set, set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT=${NATS_EXT_PORT_CLIENT:-"4222"}
+
+# If not already set, set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP=${NATS_EXT_PORT_HTTP:-"8222"}
+
 # If not already set, disable flag for re-deploying NATS from scratch.
 # WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE MESSAGE BROKER INFORMATION!
 # If NATS_REDEPLOY is "YES", the message broker will be dropped while checking/deploying NATS.
@@ -43,14 +49,14 @@ function nats_deploy_single() {
 
     echo "Install NATS (single-node)"
     echo ">>> Checking if NATS is deployed..."
-    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/nats &> /dev/null; then
+    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; then
         echo ">>> NATS is present; skipping step."
     else
         echo ">>> Deploy NATS"
-        helm3 install nats nats/nats --namespace ${NATS_NAMESPACE} --set nats.image.tag=2.9-alpine
+        helm3 install ${NATS_NAMESPACE} nats/nats --namespace ${NATS_NAMESPACE} --set nats.image.tag=2.9-alpine
 
         echo ">>> Waiting NATS statefulset to be created..."
-        while ! kubectl get --namespace ${NATS_NAMESPACE} statefulset/nats &> /dev/null; do
+        while ! kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; do
             printf "%c" "."
             sleep 1
         done
@@ -64,32 +70,32 @@ function nats_deploy_single() {
         #kubectl wait --namespace ${NATS_NAMESPACE} --for=jsonpath='{.status.readyReplicas}'=3 --timeout=300s \
         #    statefulset/nats
         echo ">>> NATS statefulset created. Waiting NATS pods to be created..."
-        while ! kubectl get --namespace ${NATS_NAMESPACE} pod/nats-0 &> /dev/null; do
+        while ! kubectl get --namespace ${NATS_NAMESPACE} pod/${NATS_NAMESPACE}-0 &> /dev/null; do
             printf "%c" "."
             sleep 1
         done
-        kubectl wait --namespace ${NATS_NAMESPACE} --for=condition=Ready --timeout=300s pod/nats-0
+        kubectl wait --namespace ${NATS_NAMESPACE} --for=condition=Ready --timeout=300s pod/${NATS_NAMESPACE}-0
     fi
     echo
 
     echo "NATS Port Mapping"
-    echo ">>> Expose NATS Client port (4222)"
-    NATS_CLIENT_PORT=$(kubectl --namespace ${NATS_NAMESPACE} get service nats -o 'jsonpath={.spec.ports[?(@.name=="client")].port}')
-    PATCH='{"data": {"'${NATS_CLIENT_PORT}'": "'${NATS_NAMESPACE}'/nats:'${NATS_CLIENT_PORT}'"}}'
+    echo ">>> Expose NATS Client port (4222->${NATS_EXT_PORT_CLIENT})"
+    NATS_PORT_CLIENT=$(kubectl --namespace ${NATS_NAMESPACE} get service ${NATS_NAMESPACE} -o 'jsonpath={.spec.ports[?(@.name=="client")].port}')
+    PATCH='{"data": {"'${NATS_EXT_PORT_CLIENT}'": "'${NATS_NAMESPACE}'/'${NATS_NAMESPACE}':'${NATS_PORT_CLIENT}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${NATS_CLIENT_PORT}', "hostPort": '${NATS_CLIENT_PORT}'}'
+    PORT_MAP='{"containerPort": '${NATS_EXT_PORT_CLIENT}', "hostPort": '${NATS_EXT_PORT_CLIENT}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
     echo
 
-    echo ">>> Expose NATS HTTP Mgmt GUI port (8222)"
-    NATS_GUI_PORT=$(kubectl --namespace ${NATS_NAMESPACE} get service nats -o 'jsonpath={.spec.ports[?(@.name=="monitor")].port}')
-    PATCH='{"data": {"'${NATS_GUI_PORT}'": "'${NATS_NAMESPACE}'/nats:'${NATS_GUI_PORT}'"}}'
+    echo ">>> Expose NATS HTTP Mgmt GUI port (8222->${NATS_EXT_PORT_HTTP})"
+    NATS_PORT_HTTP=$(kubectl --namespace ${NATS_NAMESPACE} get service ${NATS_NAMESPACE} -o 'jsonpath={.spec.ports[?(@.name=="monitor")].port}')
+    PATCH='{"data": {"'${NATS_EXT_PORT_HTTP}'": "'${NATS_NAMESPACE}'/'${NATS_NAMESPACE}':'${NATS_PORT_HTTP}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${NATS_GUI_PORT}', "hostPort": '${NATS_GUI_PORT}'}'
+    PORT_MAP='{"containerPort": '${NATS_EXT_PORT_HTTP}', "hostPort": '${NATS_EXT_PORT_HTTP}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
@@ -99,9 +105,9 @@ function nats_deploy_single() {
 function nats_undeploy_single() {
     echo "NATS"
     echo ">>> Checking if NATS is deployed..."
-    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/nats &> /dev/null; then
+    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; then
         echo ">>> Undeploy NATS"
-        helm3 uninstall --namespace ${NATS_NAMESPACE} nats
+        helm3 uninstall --namespace ${NATS_NAMESPACE} ${NATS_NAMESPACE}
     else
         echo ">>> NATS is not present; skipping step."
     fi
diff --git a/deploy/qdb.sh b/deploy/qdb.sh
index d94c000bf..cba8a5c00 100755
--- a/deploy/qdb.sh
+++ b/deploy/qdb.sh
@@ -21,6 +21,15 @@
 # If not already set, set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE=${QDB_NAMESPACE:-"qdb"}
 
+# If not already set, set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL=${QDB_EXT_PORT_SQL:-"8812"}
+
+# If not already set, set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP=${QDB_EXT_PORT_ILP:-"9009"}
+
+# If not already set, set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP=${QDB_EXT_PORT_HTTP:-"9000"}
+
 # If not already set, set the database username to be used for QuestDB.
 export QDB_USERNAME=${QDB_USERNAME:-"admin"}
 
@@ -96,34 +105,34 @@ function qdb_deploy() {
     echo
 
     echo "QuestDB Port Mapping"
-    echo ">>> Expose QuestDB SQL port (8812->8812)"
-    QDB_SQL_PORT=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
-    PATCH='{"data": {"'${QDB_SQL_PORT}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_SQL_PORT}'"}}'
+    echo ">>> Expose QuestDB SQL port (8812->${QDB_EXT_PORT_SQL})"
+    QDB_PORT_SQL=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
+    PATCH='{"data": {"'${QDB_EXT_PORT_SQL}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_PORT_SQL}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${QDB_SQL_PORT}', "hostPort": '${QDB_SQL_PORT}'}'
+    PORT_MAP='{"containerPort": '${QDB_EXT_PORT_SQL}', "hostPort": '${QDB_EXT_PORT_SQL}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
     echo
 
-    echo ">>> Expose QuestDB Influx Line Protocol port (9009->9009)"
-    QDB_ILP_PORT=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="ilp")].port}')
-    PATCH='{"data": {"'${QDB_ILP_PORT}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_ILP_PORT}'"}}'
+    echo ">>> Expose QuestDB Influx Line Protocol port (9009->${QDB_EXT_PORT_ILP})"
+    QDB_PORT_ILP=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="ilp")].port}')
+    PATCH='{"data": {"'${QDB_EXT_PORT_ILP}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_PORT_ILP}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${QDB_ILP_PORT}', "hostPort": '${QDB_ILP_PORT}'}'
+    PORT_MAP='{"containerPort": '${QDB_EXT_PORT_ILP}', "hostPort": '${QDB_EXT_PORT_ILP}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
     echo
 
-    echo ">>> Expose QuestDB HTTP Mgmt GUI port (9000->9000)"
-    QDB_GUI_PORT=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
-    PATCH='{"data": {"'${QDB_GUI_PORT}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_GUI_PORT}'"}}'
+    echo ">>> Expose QuestDB HTTP Mgmt GUI port (9000->${QDB_EXT_PORT_HTTP})"
+    QDB_PORT_HTTP=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
+    PATCH='{"data": {"'${QDB_EXT_PORT_HTTP}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_PORT_HTTP}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${QDB_GUI_PORT}', "hostPort": '${QDB_GUI_PORT}'}'
+    PORT_MAP='{"containerPort": '${QDB_EXT_PORT_HTTP}', "hostPort": '${QDB_EXT_PORT_HTTP}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
@@ -161,7 +170,10 @@ function qdb_drop_tables() {
 
 if [ "$QDB_REDEPLOY" == "YES" ]; then
     qdb_undeploy
-elif [ "$QDB_DROP_TABLES_IF_EXIST" == "YES" ]; then
-    qdb_drop_tables
 fi
+
 qdb_deploy
+
+if [ "$QDB_DROP_TABLES_IF_EXIST" == "YES" ]; then
+    qdb_drop_tables
+fi
diff --git a/deploy/tfs.sh b/deploy/tfs.sh
index 16cf5c13b..4c6dc95d2 100755
--- a/deploy/tfs.sh
+++ b/deploy/tfs.sh
@@ -51,6 +51,12 @@ export TFS_SKIP_BUILD=${TFS_SKIP_BUILD:-""}
 # If not already set, set the namespace where CockroackDB will be deployed.
 export CRDB_NAMESPACE=${CRDB_NAMESPACE:-"crdb"}
 
+# If not already set, set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL=${CRDB_EXT_PORT_SQL:-"26257"}
+
+# If not already set, set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP=${CRDB_EXT_PORT_HTTP:-"8081"}
+
 # If not already set, set the database username to be used by Context.
 export CRDB_USERNAME=${CRDB_USERNAME:-"tfs"}
 
@@ -66,12 +72,27 @@ export CRDB_DATABASE=${CRDB_DATABASE:-"tfs"}
 # If not already set, set the namespace where NATS will be deployed.
 export NATS_NAMESPACE=${NATS_NAMESPACE:-"nats"}
 
+# If not already set, set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT=${NATS_EXT_PORT_CLIENT:-"4222"}
+
+# If not already set, set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP=${NATS_EXT_PORT_HTTP:-"8222"}
+
 
 # ----- QuestDB ----------------------------------------------------------------
 
 # If not already set, set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE=${QDB_NAMESPACE:-"qdb"}
 
+# If not already set, set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL=${QDB_EXT_PORT_SQL:-"8812"}
+
+# If not already set, set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP=${QDB_EXT_PORT_ILP:-"9009"}
+
+# If not already set, set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP=${QDB_EXT_PORT_HTTP:-"9000"}
+
 # If not already set, set the database username to be used for QuestDB.
 export QDB_USERNAME=${QDB_USERNAME:-"admin"}
 
@@ -116,7 +137,7 @@ kubectl create secret generic crdb-data --namespace ${TFS_K8S_NAMESPACE} --type=
 printf "\n"
 
 echo "Create secret with NATS data"
-NATS_CLIENT_PORT=$(kubectl --namespace ${NATS_NAMESPACE} get service nats -o 'jsonpath={.spec.ports[?(@.name=="client")].port}')
+NATS_CLIENT_PORT=$(kubectl --namespace ${NATS_NAMESPACE} get service ${NATS_NAMESPACE} -o 'jsonpath={.spec.ports[?(@.name=="client")].port}')
 kubectl create secret generic nats-data --namespace ${TFS_K8S_NAMESPACE} --type='Opaque' \
     --from-literal=NATS_NAMESPACE=${NATS_NAMESPACE} \
     --from-literal=NATS_CLIENT_PORT=${NATS_CLIENT_PORT}
@@ -303,12 +324,16 @@ for COMPONENT in $TFS_COMPONENTS; do
     printf "\n"
 done
 
-if [[ "$TFS_COMPONENTS" == *"webui"* ]] && [[ "$TFS_COMPONENTS" == *"monitoring"* ]]; then
+if [[ "$TFS_COMPONENTS" == *"webui"* ]]; then
     echo "Configuring WebUI DataStores and Dashboards..."
     sleep 5
 
+    INGRESS_CTRL_NAME=$(echo "${TFS_K8S_NAMESPACE}" | sed "s/tfs/nginx-ingress-microk8s-controller/g")
+    EXT_HTTP_PORT=$(kubectl get daemonsets.apps --namespace ingress ${INGRESS_CTRL_NAME} \
+        -o 'jsonpath={.spec.template.spec.containers[?(@.name=="nginx-ingress-microk8s")].ports[?(@.name=="http")].hostPort}')
+
     # Exposed through the ingress controller "tfs-ingress"
-    GRAFANA_URL="127.0.0.1:80/grafana"
+    GRAFANA_URL="127.0.0.1:${EXT_HTTP_PORT}/grafana"
 
     # Default Grafana credentials
     GRAFANA_USERNAME="admin"
diff --git a/my_deploy.sh b/my_deploy.sh
index 6a360812b..22a7ae815 100755
--- a/my_deploy.sh
+++ b/my_deploy.sh
@@ -43,6 +43,12 @@ export TFS_SKIP_BUILD=""
 # Set the namespace where CockroackDB will be deployed.
 export CRDB_NAMESPACE="crdb"
 
+# Set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL="26257"
+
+# Set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP="8081"
+
 # Set the database username to be used by Context.
 export CRDB_USERNAME="tfs"
 
@@ -57,7 +63,7 @@ export CRDB_DATABASE="tfs"
 export CRDB_DEPLOY_MODE="single"
 
 # Disable flag for dropping database, if it exists.
-export CRDB_DROP_DATABASE_IF_EXISTS="YES"
+export CRDB_DROP_DATABASE_IF_EXISTS=""
 
 # Disable flag for re-deploying CockroachDB from scratch.
 export CRDB_REDEPLOY=""
@@ -68,6 +74,12 @@ export CRDB_REDEPLOY=""
 # Set the namespace where NATS will be deployed.
 export NATS_NAMESPACE="nats"
 
+# Set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT="4222"
+
+# Set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP="8222"
+
 # Disable flag for re-deploying NATS from scratch.
 export NATS_REDEPLOY=""
 
@@ -77,6 +89,15 @@ export NATS_REDEPLOY=""
 # Set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE="qdb"
 
+# Set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL="8812"
+
+# Set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP="9009"
+
+# Set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP="9000"
+
 # Set the database username to be used for QuestDB.
 export QDB_USERNAME="admin"
 
@@ -90,7 +111,7 @@ export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
 export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
 
 # Disable flag for dropping tables if they exist.
-export QDB_DROP_TABLES_IF_EXIST="YES"
+export QDB_DROP_TABLES_IF_EXIST=""
 
 # Disable flag for re-deploying QuestDB from scratch.
 export QDB_REDEPLOY=""
-- 
GitLab


From 7aad02e4c343f1f2f225559a2a75c3bf30c0046c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 22 Feb 2023 16:14:54 +0000
Subject: [PATCH 130/229] OFC23 Scenario:

- Completed preparation of scripts
- Created descriptor for child TFS controller
- Created preliminary descriptors for parent TFS controller
---
 src/tests/ofc23/delete_all.sh                 |   8 +-
 src/tests/ofc23/deploy_all.sh                 |  50 ++--
 src/tests/ofc23/deploy_specs_child.sh         | 103 +++++++-
 src/tests/ofc23/deploy_specs_parent.sh        | 103 +++++++-
 .../ofc23/descriptors/descriptor_child.json   |  55 ++++
 .../ofc23/descriptors/descriptor_parent.json  | 245 ++++++++++++++++++
 .../descriptors/descriptor_parent_l2vpn.json  |  20 ++
 src/tests/ofc23/descriptors/domain1.json      | 148 -----------
 src/tests/ofc23/descriptors/domain2.json      | 166 ------------
 src/tests/ofc23/dump_logs.sh                  |   3 -
 src/tests/ofc23/fast_redeploy.sh              |  40 +--
 11 files changed, 544 insertions(+), 397 deletions(-)
 create mode 100644 src/tests/ofc23/descriptors/descriptor_child.json
 create mode 100644 src/tests/ofc23/descriptors/descriptor_parent.json
 create mode 100644 src/tests/ofc23/descriptors/descriptor_parent_l2vpn.json
 delete mode 100644 src/tests/ofc23/descriptors/domain1.json
 delete mode 100644 src/tests/ofc23/descriptors/domain2.json

diff --git a/src/tests/ofc23/delete_all.sh b/src/tests/ofc23/delete_all.sh
index 6a838d985..4a03dad1c 100755
--- a/src/tests/ofc23/delete_all.sh
+++ b/src/tests/ofc23/delete_all.sh
@@ -15,10 +15,8 @@
 
 
 # Delete old namespaces
-kubectl delete namespace tfs-dom1 tfs-dom2 tfs-dom3 tfs-dom4 tfs-bchain
+kubectl delete namespace tfs-parent tfs-child
 
 # Delete secondary ingress controllers
-kubectl delete -f nfvsdn22/nginx-ingress-controller-dom1.yaml
-kubectl delete -f nfvsdn22/nginx-ingress-controller-dom2.yaml
-kubectl delete -f nfvsdn22/nginx-ingress-controller-dom3.yaml
-kubectl delete -f nfvsdn22/nginx-ingress-controller-dom4.yaml
+kubectl delete -f ofc23/nginx-ingress-controller-parent.yaml
+kubectl delete -f ofc23/nginx-ingress-controller-child.yaml
diff --git a/src/tests/ofc23/deploy_all.sh b/src/tests/ofc23/deploy_all.sh
index 19ea0e6db..4874688ad 100755
--- a/src/tests/ofc23/deploy_all.sh
+++ b/src/tests/ofc23/deploy_all.sh
@@ -15,42 +15,22 @@
 
 
 # Delete old namespaces
-kubectl delete namespace tfs-dom1 tfs-dom2 tfs-dom3 tfs-dom4
+kubectl delete namespace tfs-parent tfs-child
 
 # Delete secondary ingress controllers
-kubectl delete -f nfvsdn22/nginx-ingress-controller-dom1.yaml
-kubectl delete -f nfvsdn22/nginx-ingress-controller-dom2.yaml
-kubectl delete -f nfvsdn22/nginx-ingress-controller-dom3.yaml
-kubectl delete -f nfvsdn22/nginx-ingress-controller-dom4.yaml
-
-# Delete MockBlockchain
-#kubectl delete namespace tfs-bchain
+kubectl delete -f ofc23/nginx-ingress-controller-parent.yaml
+kubectl delete -f ofc23/nginx-ingress-controller-child.yaml
 
 # Create secondary ingress controllers
-kubectl apply -f nfvsdn22/nginx-ingress-controller-dom1.yaml
-kubectl apply -f nfvsdn22/nginx-ingress-controller-dom2.yaml
-kubectl apply -f nfvsdn22/nginx-ingress-controller-dom3.yaml
-kubectl apply -f nfvsdn22/nginx-ingress-controller-dom4.yaml
-
-# Create MockBlockchain
-#./deploy_mock_blockchain.sh
-
-# Deploy TFS for Domain 1
-source nfvsdn22/deploy_specs_dom1.sh
-./deploy.sh
-mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom1.sh
-
-# Deploy TFS for Domain 2
-source nfvsdn22/deploy_specs_dom2.sh
-./deploy.sh
-mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom2.sh
-
-# Deploy TFS for Domain 3
-source nfvsdn22/deploy_specs_dom3.sh
-./deploy.sh
-mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom3.sh
-
-# Deploy TFS for Domain 4
-source nfvsdn22/deploy_specs_dom4.sh
-./deploy.sh
-mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_dom4.sh
+kubectl apply -f ofc23/nginx-ingress-controller-parent.yaml
+kubectl apply -f ofc23/nginx-ingress-controller-child.yaml
+
+# Deploy TFS for Parent
+source ofc23/deploy_specs_parent.sh
+./deploy/all.sh
+mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_parent.sh
+
+# Deploy TFS for Child
+source ofc23/deploy_specs_child.sh
+./deploy/all.sh
+mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_child.sh
diff --git a/src/tests/ofc23/deploy_specs_child.sh b/src/tests/ofc23/deploy_specs_child.sh
index bafec4080..2cb323651 100755
--- a/src/tests/ofc23/deploy_specs_child.sh
+++ b/src/tests/ofc23/deploy_specs_child.sh
@@ -1,10 +1,11 @@
+#!/bin/bash
 # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
-#     http://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,
@@ -12,24 +13,106 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Set the URL of your local Docker registry where the images will be uploaded to.
-export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/"
+
+# ----- TeraFlowSDN ------------------------------------------------------------
+
+# Set the URL of the internal MicroK8s Docker registry where the images will be uploaded to.
+export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by spaces, you want to build images for, and deploy.
-export TFS_COMPONENTS="context device pathcomp service slice webui"
+#automation monitoring load_generator
+export TFS_COMPONENTS="context device pathcomp service slice compute webui"
 
 # Set the tag you want to use for your images.
 export TFS_IMAGE_TAG="dev"
 
-# Set the name of the Kubernetes namespace to deploy to.
+# Set the name of the Kubernetes namespace to deploy TFS to.
 export TFS_K8S_NAMESPACE="tfs-child"
 
 # Set additional manifest files to be applied after the deployment
-export TFS_EXTRA_MANIFESTS="nfvsdn22/tfs-ingress-child.yaml"
+export TFS_EXTRA_MANIFESTS="ofc23/tfs-ingress-child.yaml"
 
-# Set the neew Grafana admin password
+# Set the new Grafana admin password
 export TFS_GRAFANA_PASSWORD="admin123+"
 
-# If not already set, disable skip-build flag.
-# If TFS_SKIP_BUILD is "YES", the containers are not rebuilt-retagged-repushed and existing ones are used.
-export TFS_SKIP_BUILD="YES"
+# Disable skip-build flag to rebuild the Docker images.
+export TFS_SKIP_BUILD=""
+
+
+# ----- CockroachDB ------------------------------------------------------------
+
+# Set the namespace where CockroackDB will be deployed.
+export CRDB_NAMESPACE="crdb-child"
+
+# Set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL="26258"
+
+# Set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP="8082"
+
+# Set the database username to be used by Context.
+export CRDB_USERNAME="tfs"
+
+# Set the database user's password to be used by Context.
+export CRDB_PASSWORD="tfs123"
+
+# Set the database name to be used by Context.
+export CRDB_DATABASE="tfs"
+
+# Set CockroachDB installation mode to 'single'. This option is convenient for development and testing.
+# See ./deploy/all.sh or ./deploy/crdb.sh for additional details
+export CRDB_DEPLOY_MODE="single"
+
+# Disable flag for dropping database, if it exists.
+export CRDB_DROP_DATABASE_IF_EXISTS="YES"
+
+# Disable flag for re-deploying CockroachDB from scratch.
+export CRDB_REDEPLOY=""
+
+
+# ----- NATS -------------------------------------------------------------------
+
+# Set the namespace where NATS will be deployed.
+export NATS_NAMESPACE="nats-child"
+
+# Set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT="4223"
+
+# Set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP="8223"
+
+# Disable flag for re-deploying NATS from scratch.
+export NATS_REDEPLOY=""
+
+
+# ----- QuestDB ----------------------------------------------------------------
+
+# Set the namespace where QuestDB will be deployed.
+export QDB_NAMESPACE="qdb-child"
+
+# Set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL="8813"
+
+# Set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP="9010"
+
+# Set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP="9001"
+
+# Set the database username to be used for QuestDB.
+export QDB_USERNAME="admin"
+
+# Set the database user's password to be used for QuestDB.
+export QDB_PASSWORD="quest"
+
+# Set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
+
+# Set the table name to be used by Slice for plotting groups.
+export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
+
+# Disable flag for dropping tables if they exist.
+export QDB_DROP_TABLES_IF_EXIST="YES"
+
+# Disable flag for re-deploying QuestDB from scratch.
+export QDB_REDEPLOY=""
diff --git a/src/tests/ofc23/deploy_specs_parent.sh b/src/tests/ofc23/deploy_specs_parent.sh
index 5c2816c74..fc362c08c 100755
--- a/src/tests/ofc23/deploy_specs_parent.sh
+++ b/src/tests/ofc23/deploy_specs_parent.sh
@@ -1,10 +1,11 @@
+#!/bin/bash
 # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
-#     http://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,
@@ -12,24 +13,106 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Set the URL of your local Docker registry where the images will be uploaded to.
-export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/"
+
+# ----- TeraFlowSDN ------------------------------------------------------------
+
+# Set the URL of the internal MicroK8s Docker registry where the images will be uploaded to.
+export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by spaces, you want to build images for, and deploy.
-export TFS_COMPONENTS="context device pathcomp service slice webui"
+#automation monitoring load_generator
+export TFS_COMPONENTS="context device pathcomp service slice compute webui"
 
 # Set the tag you want to use for your images.
 export TFS_IMAGE_TAG="dev"
 
-# Set the name of the Kubernetes namespace to deploy to.
+# Set the name of the Kubernetes namespace to deploy TFS to.
 export TFS_K8S_NAMESPACE="tfs-parent"
 
 # Set additional manifest files to be applied after the deployment
-export TFS_EXTRA_MANIFESTS="nfvsdn22/tfs-ingress-parent.yaml"
+export TFS_EXTRA_MANIFESTS="ofc23/tfs-ingress-parent.yaml"
 
-# Set the neew Grafana admin password
+# Set the new Grafana admin password
 export TFS_GRAFANA_PASSWORD="admin123+"
 
-# If not already set, disable skip-build flag.
-# If TFS_SKIP_BUILD is "YES", the containers are not rebuilt-retagged-repushed and existing ones are used.
-export TFS_SKIP_BUILD="NO"
+# Disable skip-build flag to rebuild the Docker images.
+export TFS_SKIP_BUILD=""
+
+
+# ----- CockroachDB ------------------------------------------------------------
+
+# Set the namespace where CockroackDB will be deployed.
+export CRDB_NAMESPACE="crdb-parent"
+
+# Set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL="26257"
+
+# Set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP="8081"
+
+# Set the database username to be used by Context.
+export CRDB_USERNAME="tfs"
+
+# Set the database user's password to be used by Context.
+export CRDB_PASSWORD="tfs123"
+
+# Set the database name to be used by Context.
+export CRDB_DATABASE="tfs"
+
+# Set CockroachDB installation mode to 'single'. This option is convenient for development and testing.
+# See ./deploy/all.sh or ./deploy/crdb.sh for additional details
+export CRDB_DEPLOY_MODE="single"
+
+# Disable flag for dropping database, if it exists.
+export CRDB_DROP_DATABASE_IF_EXISTS="YES"
+
+# Disable flag for re-deploying CockroachDB from scratch.
+export CRDB_REDEPLOY=""
+
+
+# ----- NATS -------------------------------------------------------------------
+
+# Set the namespace where NATS will be deployed.
+export NATS_NAMESPACE="nats-parent"
+
+# Set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT="4222"
+
+# Set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP="8222"
+
+# Disable flag for re-deploying NATS from scratch.
+export NATS_REDEPLOY=""
+
+
+# ----- QuestDB ----------------------------------------------------------------
+
+# Set the namespace where QuestDB will be deployed.
+export QDB_NAMESPACE="qdb-parent"
+
+# Set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL="8812"
+
+# Set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP="9009"
+
+# Set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP="9000"
+
+# Set the database username to be used for QuestDB.
+export QDB_USERNAME="admin"
+
+# Set the database user's password to be used for QuestDB.
+export QDB_PASSWORD="quest"
+
+# Set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
+
+# Set the table name to be used by Slice for plotting groups.
+export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
+
+# Disable flag for dropping tables if they exist.
+export QDB_DROP_TABLES_IF_EXIST="YES"
+
+# Disable flag for re-deploying QuestDB from scratch.
+export QDB_REDEPLOY=""
diff --git a/src/tests/ofc23/descriptors/descriptor_child.json b/src/tests/ofc23/descriptors/descriptor_child.json
new file mode 100644
index 000000000..a167441f4
--- /dev/null
+++ b/src/tests/ofc23/descriptors/descriptor_child.json
@@ -0,0 +1,55 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "PE1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "PE2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "PE3"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "PE4"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        }
+    ],
+    "links": []
+}
diff --git a/src/tests/ofc23/descriptors/descriptor_parent.json b/src/tests/ofc23/descriptors/descriptor_parent.json
new file mode 100644
index 000000000..ca3f1e8e1
--- /dev/null
+++ b/src/tests/ofc23/descriptors/descriptor_parent.json
@@ -0,0 +1,245 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+
+
+
+        {
+            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "PE1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "PE2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "MW"}}, "device_type": "emu-microwave-radio-system", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "192.168.27.139:10"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "192.168.27.140:8"}
+                ], "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
+                    "node_ids": ["192.168.27.139", "192.168.27.140"]
+                }}}
+            ]}
+        },
+
+        {
+            "device_id": {"device_uuid": {"uuid": "IPM"}}, "device_type": "emu-xr-constellation", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "192.168.27.139:10"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "192.168.27.140:8"}
+                ], "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
+                    "node_ids": ["192.168.27.139", "192.168.27.140"]
+                }}}
+            ]}
+        },
+
+        {
+            "device_id": {"device_uuid": {"uuid": "R1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+
+
+        {
+            "device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "device_type": "emu-optical-splitter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "optical/internal", "uuid": "common"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf1"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf2"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf3"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf4"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "XR-HUB"}}, "device_type": "emu-xr-hub", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "2/1"}
+                ]}}}
+            ]}
+        },
+
+        {
+            "device_id": {"device_uuid": {"uuid": "XR-LEAF1"}}, "device_type": "emu-xr-leaf", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "2/1"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+
+        {
+            "device_id": {"device_uuid": {"uuid": "XR-LEAF2"}}, "device_type": "emu-xr-leaf", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "2/1"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R3"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+
+        {
+            "device_id": {"device_uuid": {"uuid": "PE3"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "PE4"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "DC2"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        }
+    ],
+    "links": [
+        {
+            "link_id": {"link_uuid": {"uuid": "DC1/eth1==PE1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC1/eth2==PE2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R1@D1/2==R2@D1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R1@D1"}}, "endpoint_uuid": {"uuid": "2"}},
+                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R2@D1/3==R3@D1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "3"}},
+                {"device_id": {"device_uuid": {"uuid": "R3@D1"}}, "endpoint_uuid": {"uuid": "2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R2@D1/5==R5@D1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "5"}},
+                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R3@D1/4==R4@D1/3"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R3@D1"}}, "endpoint_uuid": {"uuid": "4"}},
+                {"device_id": {"device_uuid": {"uuid": "R4@D1"}}, "endpoint_uuid": {"uuid": "3"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R4@D1/5==R5@D1/4"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R4@D1"}}, "endpoint_uuid": {"uuid": "5"}},
+                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "4"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R5@D1/1==R1@D1/5"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "1"}},
+                {"device_id": {"device_uuid": {"uuid": "R1@D1"}}, "endpoint_uuid": {"uuid": "5"}}
+            ]
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/descriptor_parent_l2vpn.json b/src/tests/ofc23/descriptors/descriptor_parent_l2vpn.json
new file mode 100644
index 000000000..1eb85eab1
--- /dev/null
+++ b/src/tests/ofc23/descriptors/descriptor_parent_l2vpn.json
@@ -0,0 +1,20 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "TFS-IP"}}, "device_type": "teraflowsdn", "device_drivers": [7],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8002"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "scheme": "http", "username": "admin", "password": "admin"
+                }}}
+            ]}
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/domain1.json b/src/tests/ofc23/descriptors/domain1.json
deleted file mode 100644
index 043b3955f..000000000
--- a/src/tests/ofc23/descriptors/domain1.json
+++ /dev/null
@@ -1,148 +0,0 @@
-{
-    "contexts": [
-        {
-            "context_id": {"context_uuid": {"uuid": "admin"}},
-            "topology_ids": [
-                {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "D1"}}
-            ], "service_ids": []
-        }
-    ],
-    "topologies": [
-        {
-            "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "D1"}},
-            "device_ids": [
-                {"device_uuid": {"uuid": "DC1"}},
-                {"device_uuid": {"uuid": "R1@D1"}},
-                {"device_uuid": {"uuid": "R2@D1"}},
-                {"device_uuid": {"uuid": "R3@D1"}},
-                {"device_uuid": {"uuid": "R4@D1"}},
-                {"device_uuid": {"uuid": "R5@D1"}}
-            ], "link_ids": [
-                {"link_uuid": {"uuid": "DC1/D1==R1@D1/DC1"}},
-                {"link_uuid": {"uuid": "R1@D1/2==R2@D1/1"}},
-                {"link_uuid": {"uuid": "R2@D1/3==R3@D1/2"}},
-                {"link_uuid": {"uuid": "R2@D1/5==R5@D1/2"}},
-                {"link_uuid": {"uuid": "R3@D1/4==R4@D1/3"}},
-                {"link_uuid": {"uuid": "R4@D1/5==R5@D1/4"}},
-                {"link_uuid": {"uuid": "R5@D1/1==R1@D1/5"}}
-            ]
-        }
-    ],
-    "devices": [
-        {
-            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/border", "uuid": "D1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R1@D1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "5"},
-                    {"sample_types": [], "type": "copper/border", "uuid": "DC1"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R2@D1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "3"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "5"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R3@D1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "4"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R4@D1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "3"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "5"},
-                    {"sample_types": [], "type": "copper/border", "uuid": "D2"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R5@D1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "4"},
-                    {"sample_types": [], "type": "copper/border", "uuid": "D3"}
-                ]}}}
-            ]}
-        }
-    ],
-    "links": [
-        {
-            "link_id": {"link_uuid": {"uuid": "DC1/D1==R1@D1/DC1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "D1"}},
-                {"device_id": {"device_uuid": {"uuid": "R1@D1"}}, "endpoint_uuid": {"uuid": "DC1"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R1@D1/2==R2@D1/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R1@D1"}}, "endpoint_uuid": {"uuid": "2"}},
-                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "1"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R2@D1/3==R3@D1/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "3"}},
-                {"device_id": {"device_uuid": {"uuid": "R3@D1"}}, "endpoint_uuid": {"uuid": "2"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R2@D1/5==R5@D1/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "5"}},
-                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "2"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R3@D1/4==R4@D1/3"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R3@D1"}}, "endpoint_uuid": {"uuid": "4"}},
-                {"device_id": {"device_uuid": {"uuid": "R4@D1"}}, "endpoint_uuid": {"uuid": "3"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R4@D1/5==R5@D1/4"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R4@D1"}}, "endpoint_uuid": {"uuid": "5"}},
-                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "4"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R5@D1/1==R1@D1/5"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "1"}},
-                {"device_id": {"device_uuid": {"uuid": "R1@D1"}}, "endpoint_uuid": {"uuid": "5"}}
-            ]
-        }
-    ]
-}
diff --git a/src/tests/ofc23/descriptors/domain2.json b/src/tests/ofc23/descriptors/domain2.json
deleted file mode 100644
index 81d397abf..000000000
--- a/src/tests/ofc23/descriptors/domain2.json
+++ /dev/null
@@ -1,166 +0,0 @@
-{
-    "contexts": [
-        {
-            "context_id": {"context_uuid": {"uuid": "admin"}},
-            "topology_ids": [
-                {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "D2"}}
-            ], "service_ids": []
-        }
-    ],
-    "topologies": [
-        {
-            "topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "D2"}},
-            "device_ids": [
-                {"device_uuid": {"uuid": "R1@D2"}},
-                {"device_uuid": {"uuid": "R2@D2"}},
-                {"device_uuid": {"uuid": "R3@D2"}},
-                {"device_uuid": {"uuid": "R4@D2"}},
-                {"device_uuid": {"uuid": "R5@D2"}},
-                {"device_uuid": {"uuid": "R6@D2"}}
-            ], "link_ids": [
-                {"link_uuid": {"uuid": "R1@D2/2==R2@D2/1"}},
-                {"link_uuid": {"uuid": "R1@D2/6==R6@D2/1"}},
-                {"link_uuid": {"uuid": "R1@D2/5==R5@D2/1"}},
-                {"link_uuid": {"uuid": "R2@D2/3==R3@D2/2"}},
-                {"link_uuid": {"uuid": "R2@D2/4==R4@D2/2"}},
-                {"link_uuid": {"uuid": "R2@D2/5==R5@D2/2"}},
-                {"link_uuid": {"uuid": "R2@D2/6==R6@D2/2"}},
-                {"link_uuid": {"uuid": "R3@D2/6==R6@D2/3"}},
-                {"link_uuid": {"uuid": "R4@D2/5==R5@D2/4"}}
-            ]
-        }
-    ],
-    "devices": [
-        {
-            "device_id": {"device_uuid": {"uuid": "R1@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "5"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "6"},
-                    {"sample_types": [], "type": "copper/border", "uuid": "D1"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R2@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "3"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "4"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "5"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "6"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R3@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "6"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R4@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "5"},
-                    {"sample_types": [], "type": "copper/border", "uuid": "D4"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R5@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "4"},
-                    {"sample_types": [], "type": "copper/border", "uuid": "D3"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R6@D2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 2, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "3"}
-                ]}}}
-            ]}
-        }
-    ],
-    "links": [
-        {
-            "link_id": {"link_uuid": {"uuid": "R1@D2/2==R2@D2/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R1@D2"}}, "endpoint_uuid": {"uuid": "2"}},
-                {"device_id": {"device_uuid": {"uuid": "R2@D2"}}, "endpoint_uuid": {"uuid": "1"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R1@D2/6==R6@D2/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R1@D2"}}, "endpoint_uuid": {"uuid": "6"}},
-                {"device_id": {"device_uuid": {"uuid": "R6@D2"}}, "endpoint_uuid": {"uuid": "1"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R1@D2/5==R5@D2/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R1@D2"}}, "endpoint_uuid": {"uuid": "5"}},
-                {"device_id": {"device_uuid": {"uuid": "R5@D2"}}, "endpoint_uuid": {"uuid": "1"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R2@D2/3==R3@D2/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R2@D2"}}, "endpoint_uuid": {"uuid": "3"}},
-                {"device_id": {"device_uuid": {"uuid": "R3@D2"}}, "endpoint_uuid": {"uuid": "2"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R2@D2/4==R4@D2/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R2@D2"}}, "endpoint_uuid": {"uuid": "4"}},
-                {"device_id": {"device_uuid": {"uuid": "R4@D2"}}, "endpoint_uuid": {"uuid": "2"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R2@D2/5==R5@D2/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R2@D2"}}, "endpoint_uuid": {"uuid": "5"}},
-                {"device_id": {"device_uuid": {"uuid": "R5@D2"}}, "endpoint_uuid": {"uuid": "2"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R2@D2/6==R6@D2/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R2@D2"}}, "endpoint_uuid": {"uuid": "6"}},
-                {"device_id": {"device_uuid": {"uuid": "R6@D2"}}, "endpoint_uuid": {"uuid": "2"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R3@D2/6==R6@D2/3"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R3@D2"}}, "endpoint_uuid": {"uuid": "6"}},
-                {"device_id": {"device_uuid": {"uuid": "R6@D2"}}, "endpoint_uuid": {"uuid": "3"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "R4@D2/5==R5@D2/4"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R4@D2"}}, "endpoint_uuid": {"uuid": "5"}},
-                {"device_id": {"device_uuid": {"uuid": "R5@D2"}}, "endpoint_uuid": {"uuid": "4"}}
-            ]
-        }
-    ]
-}
diff --git a/src/tests/ofc23/dump_logs.sh b/src/tests/ofc23/dump_logs.sh
index 533879c2a..cc3162b33 100755
--- a/src/tests/ofc23/dump_logs.sh
+++ b/src/tests/ofc23/dump_logs.sh
@@ -34,9 +34,6 @@ kubectl --namespace tfs-child logs deployments/serviceservice server > tmp/exec/
 kubectl --namespace tfs-child logs deployments/pathcompservice frontend > tmp/exec/child/pathcomp-frontend.log
 kubectl --namespace tfs-child logs deployments/pathcompservice backend > tmp/exec/child/pathcomp-backend.log
 kubectl --namespace tfs-child logs deployments/sliceservice server > tmp/exec/child/slice.log
-kubectl --namespace tfs-child logs deployments/interdomainservice server > tmp/exec/child/interdomain.log
-kubectl --namespace tfs-child logs deployments/dltservice connector > tmp/exec/child/dlt-connector.log
-kubectl --namespace tfs-child logs deployments/dltservice gateway > tmp/exec/child/dlt-gateway.log
 printf "\n"
 
 echo "Done!"
diff --git a/src/tests/ofc23/fast_redeploy.sh b/src/tests/ofc23/fast_redeploy.sh
index 3c942a799..58d1193de 100755
--- a/src/tests/ofc23/fast_redeploy.sh
+++ b/src/tests/ofc23/fast_redeploy.sh
@@ -17,29 +17,29 @@
 kubectl delete namespace tfs-parent tfs-child
 
 echo "Deploying tfs-parent ..."
-kubectl delete -f nfvsdn22/nginx-ingress-controller-parent.yaml                 > ./tmp/logs/deploy-tfs-parent.log
-kubectl create namespace tfs-parent                                             > ./tmp/logs/deploy-tfs-parent.log
-kubectl apply -f nfvsdn22/nginx-ingress-controller-parent.yaml                  > ./tmp/logs/deploy-tfs-parent.log
-kubectl --namespace tfs-parent apply -f ./tmp/manifests/contextservice.yaml     > ./tmp/logs/deploy-tfs-parent.log
-kubectl --namespace tfs-parent apply -f ./tmp/manifests/deviceservice.yaml      > ./tmp/logs/deploy-tfs-parent.log
-kubectl --namespace tfs-parent apply -f ./tmp/manifests/pathcompservice.yaml    > ./tmp/logs/deploy-tfs-parent.log
-kubectl --namespace tfs-parent apply -f ./tmp/manifests/serviceservice.yaml     > ./tmp/logs/deploy-tfs-parent.log
-kubectl --namespace tfs-parent apply -f ./tmp/manifests/sliceservice.yaml       > ./tmp/logs/deploy-tfs-parent.log
-kubectl --namespace tfs-parent apply -f ./tmp/manifests/webuiservice.yaml       > ./tmp/logs/deploy-tfs-parent.log
-kubectl --namespace tfs-parent apply -f nfvsdn22/tfs-ingress-parent.yaml        > ./tmp/logs/deploy-tfs-parent.log
+kubectl delete -f ofc23/nginx-ingress-controller-parent.yaml                 > ./tmp/logs/deploy-tfs-parent.log
+kubectl create namespace tfs-parent                                          > ./tmp/logs/deploy-tfs-parent.log
+kubectl apply -f ofc23/nginx-ingress-controller-parent.yaml                  > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/contextservice.yaml  > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/deviceservice.yaml   > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/pathcompservice.yaml > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/serviceservice.yaml  > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/sliceservice.yaml    > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ./tmp/manifests/webuiservice.yaml    > ./tmp/logs/deploy-tfs-parent.log
+kubectl --namespace tfs-parent apply -f ofc23/tfs-ingress-parent.yaml        > ./tmp/logs/deploy-tfs-parent.log
 printf "\n"
 
 echo "Deploying tfs-child ..."
-kubectl delete -f nfvsdn22/nginx-ingress-controller-child.yaml                 > ./tmp/logs/deploy-tfs-child.log
-kubectl create namespace tfs-child                                             > ./tmp/logs/deploy-tfs-child.log
-kubectl apply -f nfvsdn22/nginx-ingress-controller-child.yaml                  > ./tmp/logs/deploy-tfs-child.log
-kubectl --namespace tfs-child apply -f ./tmp/manifests/contextservice.yaml     > ./tmp/logs/deploy-tfs-child.log
-kubectl --namespace tfs-child apply -f ./tmp/manifests/deviceservice.yaml      > ./tmp/logs/deploy-tfs-child.log
-kubectl --namespace tfs-child apply -f ./tmp/manifests/pathcompservice.yaml    > ./tmp/logs/deploy-tfs-child.log
-kubectl --namespace tfs-child apply -f ./tmp/manifests/serviceservice.yaml     > ./tmp/logs/deploy-tfs-child.log
-kubectl --namespace tfs-child apply -f ./tmp/manifests/sliceservice.yaml       > ./tmp/logs/deploy-tfs-child.log
-kubectl --namespace tfs-child apply -f ./tmp/manifests/webuiservice.yaml       > ./tmp/logs/deploy-tfs-child.log
-kubectl --namespace tfs-child apply -f nfvsdn22/tfs-ingress-child.yaml         > ./tmp/logs/deploy-tfs-child.log
+kubectl delete -f ofc23/nginx-ingress-controller-child.yaml                  > ./tmp/logs/deploy-tfs-child.log
+kubectl create namespace tfs-child                                           > ./tmp/logs/deploy-tfs-child.log
+kubectl apply -f ofc23/nginx-ingress-controller-child.yaml                   > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/contextservice.yaml   > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/deviceservice.yaml    > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/pathcompservice.yaml  > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/serviceservice.yaml   > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/sliceservice.yaml     > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ./tmp/manifests/webuiservice.yaml     > ./tmp/logs/deploy-tfs-child.log
+kubectl --namespace tfs-child apply -f ofc23/tfs-ingress-child.yaml          > ./tmp/logs/deploy-tfs-child.log
 printf "\n"
 
 echo "Waiting tfs-parent ..."
-- 
GitLab


From 04be3bc74c1dfed15cfdd25ae5cf7719f7634718 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 22 Feb 2023 16:15:14 +0000
Subject: [PATCH 131/229] OFC23 Scenario:

- Added symbolic link
---
 ofc23 | 1 +
 1 file changed, 1 insertion(+)
 create mode 120000 ofc23

diff --git a/ofc23 b/ofc23
new file mode 120000
index 000000000..a1135d4c5
--- /dev/null
+++ b/ofc23
@@ -0,0 +1 @@
+src/tests/ofc23/
\ No newline at end of file
-- 
GitLab


From 4aaf2d676fa1d80190796bcb4c79c308a0d6d59a Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 23 Feb 2023 09:41:53 +0000
Subject: [PATCH 132/229] OFC'23 scenario:

- Added convenience scripts to deploy only parent or child
---
 src/tests/ofc23/deploy_child.sh  | 29 +++++++++++++++++++++++++++++
 src/tests/ofc23/deploy_parent.sh | 29 +++++++++++++++++++++++++++++
 2 files changed, 58 insertions(+)
 create mode 100755 src/tests/ofc23/deploy_child.sh
 create mode 100755 src/tests/ofc23/deploy_parent.sh

diff --git a/src/tests/ofc23/deploy_child.sh b/src/tests/ofc23/deploy_child.sh
new file mode 100755
index 000000000..9b05ed887
--- /dev/null
+++ b/src/tests/ofc23/deploy_child.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# Delete old namespaces
+kubectl delete namespace tfs-child
+
+# Delete secondary ingress controllers
+kubectl delete -f ofc23/nginx-ingress-controller-child.yaml
+
+# Create secondary ingress controllers
+kubectl apply -f ofc23/nginx-ingress-controller-child.yaml
+
+# Deploy TFS for Child
+source ofc23/deploy_specs_child.sh
+./deploy/all.sh
+mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_child.sh
diff --git a/src/tests/ofc23/deploy_parent.sh b/src/tests/ofc23/deploy_parent.sh
new file mode 100755
index 000000000..ac4a29542
--- /dev/null
+++ b/src/tests/ofc23/deploy_parent.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# Delete old namespaces
+kubectl delete namespace tfs-parent
+
+# Delete secondary ingress controllers
+kubectl delete -f ofc23/nginx-ingress-controller-parent.yaml
+
+# Create secondary ingress controllers
+kubectl apply -f ofc23/nginx-ingress-controller-parent.yaml
+
+# Deploy TFS for Parent
+source ofc23/deploy_specs_parent.sh
+./deploy/all.sh
+mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_parent.sh
-- 
GitLab


From d73844d2d7455328f51b8c309ae632820b4c120d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 23 Feb 2023 15:30:40 +0000
Subject: [PATCH 133/229] Pre-merge cleanup:

- Reduced log levels to INFO
- Generalized paths
- Minor code and comment cleanup
---
 manifests/deviceservice.yaml                    | 2 +-
 manifests/serviceservice.yaml                   | 2 +-
 scripts/run_tests_locally-device-openconfig.sh  | 2 +-
 src/load_generator/command/__main__.py          | 6 +++---
 src/load_generator/load_gen/RequestGenerator.py | 1 -
 5 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/manifests/deviceservice.yaml b/manifests/deviceservice.yaml
index ddcc997cd..ca2c81f0f 100644
--- a/manifests/deviceservice.yaml
+++ b/manifests/deviceservice.yaml
@@ -36,7 +36,7 @@ spec:
         - containerPort: 9192
         env:
         - name: LOG_LEVEL
-          value: "DEBUG"
+          value: "INFO"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:2020"]
diff --git a/manifests/serviceservice.yaml b/manifests/serviceservice.yaml
index 801c06f52..3fa4a6e0d 100644
--- a/manifests/serviceservice.yaml
+++ b/manifests/serviceservice.yaml
@@ -36,7 +36,7 @@ spec:
         - containerPort: 9192
         env:
         - name: LOG_LEVEL
-          value: "DEBUG"
+          value: "INFO"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:3030"]
diff --git a/scripts/run_tests_locally-device-openconfig.sh b/scripts/run_tests_locally-device-openconfig.sh
index b0a6f946f..06a8c8e10 100755
--- a/scripts/run_tests_locally-device-openconfig.sh
+++ b/scripts/run_tests_locally-device-openconfig.sh
@@ -14,7 +14,7 @@
 # limitations under the License.
 
 
-PROJECTDIR=/home/ubuntu/controller/
+PROJECTDIR=`pwd`
 
 cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
diff --git a/src/load_generator/command/__main__.py b/src/load_generator/command/__main__.py
index 5db77fb54..2281767b1 100644
--- a/src/load_generator/command/__main__.py
+++ b/src/load_generator/command/__main__.py
@@ -31,9 +31,9 @@ def main():
             RequestType.SERVICE_L3NM,
             #RequestType.SERVICE_MW,
             #RequestType.SERVICE_TAPI,
-            #RequestType.SLICE_L2NM,
-            #RequestType.SLICE_L3NM,
-        ],                                                                                                                                                                                             
+            RequestType.SLICE_L2NM,
+            RequestType.SLICE_L3NM,
+        ],
         offered_load  = 10,
         holding_time  = 10,
         dry_mode      = False,           # in dry mode, no request is sent to TeraFlowSDN
diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index 0922ae5e0..7e0acbe76 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -322,7 +322,6 @@ class RequestGenerator:
                 json_config_rule_set('/settings', {
                     'bgp_as'          : bgp_as,
                     'route_distinguisher': route_distinguisher,
-
                 }),
                 json_config_rule_set(
                     '/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_name, src_endpoint_name), {
-- 
GitLab


From d3e89f37d18145d8e1503151a60edce630932a37 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 23 Feb 2023 15:35:30 +0000
Subject: [PATCH 134/229] Pre-merge cleanup:

- Updated Netconf/OpenConfig descriptor files
- Normalized variable names in OpenConfigDriver
- Minor code cleanup
---
 hackfest/tfs-descriptors/device-all.json      |  8 +++---
 .../device-netconf-openconfig.json            |  2 +-
 hackfest/tfs-descriptors/old/device.json      |  6 ++---
 .../drivers/openconfig/OpenConfigDriver.py    | 26 +++++++++----------
 .../tests/Device_OpenConfig_Template.py       |  2 +-
 5 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/hackfest/tfs-descriptors/device-all.json b/hackfest/tfs-descriptors/device-all.json
index 8cb8e0314..36a93fe98 100644
--- a/hackfest/tfs-descriptors/device-all.json
+++ b/hackfest/tfs-descriptors/device-all.json
@@ -9,7 +9,7 @@
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "admin", "password": "admin",
                     "force_running": false, "hostkey_verify": false, "look_for_keys": false,
-                    "allow_agent": false, "delete_rule": true, "device_params": {"name": "default"},
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "default"},
                     "manager_params": {"timeout" : 120}
                 }}}
             ]},
@@ -26,7 +26,7 @@
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "admin", "password": "admin",
                     "force_running": false, "hostkey_verify": false, "look_for_keys": false,
-                    "allow_agent": false, "delete_rule": true, "device_params": {"name": "default"},
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "default"},
                     "manager_params": {"timeout" : 120}
                 }}}
             ]},
@@ -43,7 +43,7 @@
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "admin", "password": "admin",
                     "force_running": false, "hostkey_verify": false, "look_for_keys": false,
-                    "allow_agent": false, "delete_rule": true, "device_params": {"name": "default"},
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "default"},
                     "manager_params": {"timeout" : 120}
                 }}}
             ]},
@@ -60,7 +60,7 @@
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "admin", "password": "admin",
                     "force_running": false, "hostkey_verify": false, "look_for_keys": false,
-                    "allow_agent": false, "delete_rule": true, "device_params": {"name": "default"},
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "default"},
                     "manager_params": {"timeout" : 120}
                 }}}
             ]},
diff --git a/hackfest/tfs-descriptors/device-netconf-openconfig.json b/hackfest/tfs-descriptors/device-netconf-openconfig.json
index 7e01f037e..490e36efd 100644
--- a/hackfest/tfs-descriptors/device-netconf-openconfig.json
+++ b/hackfest/tfs-descriptors/device-netconf-openconfig.json
@@ -9,7 +9,7 @@
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "admin", "password": "admin",
                     "force_running": false, "hostkey_verify": false, "look_for_keys": false,
-                    "allow_agent": false, "delete_rule": true, "device_params": {"name": "default"},
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "default"},
                     "manager_params": {"timeout" : 15}
                 }}}
             ]},
diff --git a/hackfest/tfs-descriptors/old/device.json b/hackfest/tfs-descriptors/old/device.json
index 03736314d..abe529e72 100644
--- a/hackfest/tfs-descriptors/old/device.json
+++ b/hackfest/tfs-descriptors/old/device.json
@@ -27,7 +27,7 @@
             "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.15"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8301"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"username\": \"admin\", \"password\": \"admin\", \"force_running\": true, \"hostkey_verify\": false, \"look_for_keys\": false, \"allow_agent\": true, \"delete_rule\": false, \"device_params\"  : {\"name\": \"default\"}, \"manager_params\" : {\"timeout\": 15}}"}}
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"username\": \"admin\", \"password\": \"admin\", \"force_running\": true, \"hostkey_verify\": false, \"look_for_keys\": false, \"allow_agent\": true, \"commit_per_rule\": false, \"device_params\"  : {\"name\": \"default\"}, \"manager_params\" : {\"timeout\": 15}}"}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [1],
@@ -39,7 +39,7 @@
             "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.15"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8302"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"username\": \"admin\", \"password\": \"admin\", \"force_running\": true, \"hostkey_verify\": false, \"look_for_keys\": false, \"allow_agent\": true, \"delete_rule\": false, \"device_params\"  : {\"name\": \"default\"}, \"manager_params\" : {\"timeout\": 15}}"}}
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"username\": \"admin\", \"password\": \"admin\", \"force_running\": true, \"hostkey_verify\": false, \"look_for_keys\": false, \"allow_agent\": true, \"commit_per_rule\": false, \"device_params\"  : {\"name\": \"default\"}, \"manager_params\" : {\"timeout\": 15}}"}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [1],
@@ -51,7 +51,7 @@
             "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.15"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8303"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"username\": \"admin\", \"password\": \"admin\", \"force_running\": true, \"hostkey_verify\": false, \"look_for_keys\": false, \"allow_agent\": true, \"delete_rule\": false, \"device_params\"  : {\"name\": \"default\"}, \"manager_params\" : {\"timeout\": 15}}"}}
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"username\": \"admin\", \"password\": \"admin\", \"force_running\": true, \"hostkey_verify\": false, \"look_for_keys\": false, \"allow_agent\": true, \"commit_per_rule\": false, \"device_params\"  : {\"name\": \"default\"}, \"manager_params\" : {\"timeout\": 15}}"}}
             ]},
             "device_operational_status": 1,
             "device_drivers": [1],
diff --git a/src/device/service/drivers/openconfig/OpenConfigDriver.py b/src/device/service/drivers/openconfig/OpenConfigDriver.py
index bce977dc9..c633fb1a5 100644
--- a/src/device/service/drivers/openconfig/OpenConfigDriver.py
+++ b/src/device/service/drivers/openconfig/OpenConfigDriver.py
@@ -58,18 +58,18 @@ class NetconfSessionHandler:
         self.__connected = threading.Event()
         self.__address = address
         self.__port = int(port)
-        self.__username       = settings.get('username')
-        self.__password       = settings.get('password')
-        self.__vendor         = settings.get('vendor')
-        self.__key_filename   = settings.get('key_filename')
-        self.__hostkey_verify = settings.get('hostkey_verify', True)
-        self.__look_for_keys  = settings.get('look_for_keys', True)
-        self.__allow_agent    = settings.get('allow_agent', True)
-        self.__force_running  = settings.get('force_running', False)
-        self.__commit_per_rule  = settings.get('commit_rule', False)
-        self.__device_params  = settings.get('device_params', {})
-        self.__manager_params = settings.get('manager_params', {})
-        self.__nc_params      = settings.get('nc_params', {})
+        self.__username        = settings.get('username')
+        self.__password        = settings.get('password')
+        self.__vendor          = settings.get('vendor')
+        self.__key_filename    = settings.get('key_filename')
+        self.__hostkey_verify  = settings.get('hostkey_verify', True)
+        self.__look_for_keys   = settings.get('look_for_keys', True)
+        self.__allow_agent     = settings.get('allow_agent', True)
+        self.__force_running   = settings.get('force_running', False)
+        self.__commit_per_rule = settings.get('commit_per_rule', False)
+        self.__device_params   = settings.get('device_params', {})
+        self.__manager_params  = settings.get('manager_params', {})
+        self.__nc_params       = settings.get('nc_params', {})
         self.__manager : Manager   = None
         self.__candidate_supported = False
 
@@ -192,7 +192,7 @@ def do_sampling(
 
 def edit_config(
     netconf_handler : NetconfSessionHandler, logger : logging.Logger, resources : List[Tuple[str, Any]], delete=False,
-    commit_per_rule= False, target='running', default_operation='merge', test_option=None, error_option=None,
+    commit_per_rule=False, target='running', default_operation='merge', test_option=None, error_option=None,
     format='xml' # pylint: disable=redefined-builtin
 ):
     str_method = 'DeleteConfig' if delete else 'SetConfig'
diff --git a/src/device/tests/Device_OpenConfig_Template.py b/src/device/tests/Device_OpenConfig_Template.py
index 8ab453375..b9aae79a2 100644
--- a/src/device/tests/Device_OpenConfig_Template.py
+++ b/src/device/tests/Device_OpenConfig_Template.py
@@ -32,7 +32,7 @@ DEVICE_OC_CONNECT_RULES = json_device_connect_rules(DEVICE_OC_ADDRESS, DEVICE_OC
     'hostkey_verify' : True,
     'look_for_keys'  : True,
     'allow_agent'    : True,
-    'delete_rule'    : False,
+    'commit_per_rule': False,
     'device_params'  : {'name': 'default'},
     'manager_params' : {'timeout' : DEVICE_OC_TIMEOUT},
 })
-- 
GitLab


From 8e277f4b91d8ed13e00d1ec8e72b353da87b5d51 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 23 Feb 2023 15:39:12 +0000
Subject: [PATCH 135/229] Pre-merge cleanup:

- Updated Netconf/OpenConfig log messages
---
 .../service/drivers/openconfig/OpenConfigDriver.py     | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/device/service/drivers/openconfig/OpenConfigDriver.py b/src/device/service/drivers/openconfig/OpenConfigDriver.py
index c633fb1a5..a0c335193 100644
--- a/src/device/service/drivers/openconfig/OpenConfigDriver.py
+++ b/src/device/service/drivers/openconfig/OpenConfigDriver.py
@@ -196,12 +196,12 @@ def edit_config(
     format='xml' # pylint: disable=redefined-builtin
 ):
     str_method = 'DeleteConfig' if delete else 'SetConfig'
-    logger.info('[{:s}] resources = {:s}'.format(str_method, str(resources)))
+    #logger.debug('[{:s}] resources = {:s}'.format(str_method, str(resources)))
     results = [None for _ in resources]
     for i,resource in enumerate(resources):
         str_resource_name = 'resources[#{:d}]'.format(i)
         try:
-            logger.info('[{:s}] resource = {:s}'.format(str_method, str(resource)))
+            #logger.debug('[{:s}] resource = {:s}'.format(str_method, str(resource)))
             chk_type(str_resource_name, resource, (list, tuple))
             chk_length(str_resource_name, resource, min_length=2, max_length=2)
             resource_key,resource_value = resource
@@ -209,8 +209,8 @@ def edit_config(
             str_config_message = compose_config(
                 resource_key, resource_value, delete=delete, vendor=netconf_handler.vendor)
             if str_config_message is None: raise UnsupportedResourceKeyException(resource_key)
-            logger.info('[{:s}] str_config_message[{:d}] = {:s}'.format(
-                str_method, len(str_config_message), str(str_config_message)))
+            #logger.debug('[{:s}] str_config_message[{:d}] = {:s}'.format(
+            #    str_method, len(str_config_message), str(str_config_message)))
             netconf_handler.edit_config(
                 config=str_config_message, target=target, default_operation=default_operation,
                 test_option=test_option, error_option=error_option, format=format)
@@ -305,7 +305,7 @@ class OpenConfigDriver(_Driver):
                 try:
                     chk_string(str_resource_name, resource_key, allow_empty=False)
                     str_filter = get_filter(resource_key)
-                    self.__logger.info('[GetConfig] str_filter = {:s}'.format(str(str_filter)))
+                    #self.__logger.debug('[GetConfig] str_filter = {:s}'.format(str(str_filter)))
                     if str_filter is None: str_filter = resource_key
                     xml_data = self.__netconf_handler.get(filter=str_filter).data_ele
                     if isinstance(xml_data, Exception): raise xml_data
-- 
GitLab


From 5fc285e6e44eb17ace9a4918615217e5328e001f Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 23 Feb 2023 15:44:29 +0000
Subject: [PATCH 136/229] Pre-merge cleanup:

- Restored LoadGen default parameters
---
 src/load_generator/command/__main__.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/load_generator/command/__main__.py b/src/load_generator/command/__main__.py
index 2281767b1..7504eb6da 100644
--- a/src/load_generator/command/__main__.py
+++ b/src/load_generator/command/__main__.py
@@ -25,7 +25,7 @@ LOGGER = logging.getLogger(__name__)
 def main():
     LOGGER.info('Starting...')
     parameters = Parameters(
-        num_requests = 20,
+        num_requests = 100,
         request_types = [
             RequestType.SERVICE_L2NM,
             RequestType.SERVICE_L3NM,
@@ -34,7 +34,7 @@ def main():
             RequestType.SLICE_L2NM,
             RequestType.SLICE_L3NM,
         ],
-        offered_load  = 10,
+        offered_load  = 50,
         holding_time  = 10,
         dry_mode      = False,           # in dry mode, no request is sent to TeraFlowSDN
         record_to_dlt = False,           # if record_to_dlt, changes in device/link/service/slice are uploaded to DLT
-- 
GitLab


From ee6d01a174d7f5cd4d494dd19807829e1e5383a2 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 23 Feb 2023 16:04:54 +0000
Subject: [PATCH 137/229] Common:

- Added missing device types
---
 src/common/DeviceTypes.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/common/DeviceTypes.py b/src/common/DeviceTypes.py
index 2cb1fb4f0..16b94eb0d 100644
--- a/src/common/DeviceTypes.py
+++ b/src/common/DeviceTypes.py
@@ -25,9 +25,11 @@ class DeviceTypeEnum(Enum):
     EMULATED_OPEN_LINE_SYSTEM       = 'emu-open-line-system'
     EMULATED_OPTICAL_ROADM          = 'emu-optical-roadm'
     EMULATED_OPTICAL_TRANSPONDER    = 'emu-optical-transponder'
+    EMULATED_OPTICAL_SPLITTER       = 'emu-optical-splitter'        # passive component required for XR Constellation
     EMULATED_P4_SWITCH              = 'emu-p4-switch'
     EMULATED_PACKET_ROUTER          = 'emu-packet-router'
     EMULATED_PACKET_SWITCH          = 'emu-packet-switch'
+    EMULATED_XR_CONSTELLATION       = 'emu-xr-constellation'
 
     # Real device types
     DATACENTER                      = 'datacenter'
-- 
GitLab


From 92fa87266e093ad77ac0860614096ce5e396a367 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 23 Feb 2023 16:06:18 +0000
Subject: [PATCH 138/229] WebUI component:

- Added missing device topology icons
- Added stylink to mgmt links in topology plot
---
 .../topology_icons/Acknowledgements.txt       |   3 +++
 .../topology_icons/emu-optical-splitter.png   | Bin 0 -> 8451 bytes
 .../topology_icons/emu-xr-constellation.png   | Bin 0 -> 17814 bytes
 .../topology_icons/optical-splitter.png       | Bin 0 -> 9244 bytes
 src/webui/service/templates/js/topology.js    |  20 +++++++++++++-----
 5 files changed, 18 insertions(+), 5 deletions(-)
 create mode 100644 src/webui/service/static/topology_icons/emu-optical-splitter.png
 create mode 100644 src/webui/service/static/topology_icons/emu-xr-constellation.png
 create mode 100644 src/webui/service/static/topology_icons/optical-splitter.png

diff --git a/src/webui/service/static/topology_icons/Acknowledgements.txt b/src/webui/service/static/topology_icons/Acknowledgements.txt
index b285d2259..fb04defd4 100644
--- a/src/webui/service/static/topology_icons/Acknowledgements.txt
+++ b/src/webui/service/static/topology_icons/Acknowledgements.txt
@@ -24,3 +24,6 @@ https://symbols.getvecta.com/stencil_241/213_programmable-sw.32d3794d56.png => e
 
 https://symbols.getvecta.com/stencil_240/275_wae.c06b769cd7.png => optical-transponder.png
 https://symbols.getvecta.com/stencil_241/289_wae.216d930c17.png => emu-optical-transponder.png
+
+https://symbols.getvecta.com/stencil_240/128_localdirector.c1e561769f.png => optical-splitter.png
+https://symbols.getvecta.com/stencil_241/158_local-director.6b38eab9e4.png => emu-optical-splitter.png
diff --git a/src/webui/service/static/topology_icons/emu-optical-splitter.png b/src/webui/service/static/topology_icons/emu-optical-splitter.png
new file mode 100644
index 0000000000000000000000000000000000000000..12b7727d68ef749b52fcdd592c0427f63b58dc75
GIT binary patch
literal 8451
zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mJh`hRWK$QU(SE22U5qkczmsbGfgChHgFn
z{FsP5$0E0tE5#qO#R`aiEL>Z?*(A`YroSfCp;NNyhm#x=*NMkmb^)HMM_hc2S$sBh
zE5}PZ3y6wT@=OuoI;G_6C2*nk_?^ercRtIWv#g%K`TMQvwSWI!ljv!=7MFeQe$4&<
z(b?~|UjNj>#K_@rK#*yka#@lZivk0q;|2*9frbWS76F}fr`Cl64Gc|3B^nr5<|sBK
zSPE<Lv@);==p18UQFy?^$Z~pSK%xeVLPLTfn*sx4I)_5UxfU*GMFvKeZbJq}4hv_7
zgGFi~5?qWN3K2aZizJyirWr3h6u{xYa4?C-fr06qfWwA4oT6<`3``ti$qY;a1#JvX
zPkmMxh%gB_Y>;3c;Z9lbQs_f%eZ8P1>%pvD$qeTeAFwdq|316(1h>*Bi>9Y8Ck%v`
ze5W_O|2^4t$^MR*r+X59?z<o8qL;Jl;gMpFC$k*X1ugd<Jbd3mH)7xW`O7Z52xiWF
zJ>j7Yi-LeaLD+_x`}?C@@|61o8XP7oewbL?^z`??=Ppm`1Yh1wIn=UPprJu%#)~N+
zGoxIdb)2Z5ek}je63<WP>;FyO;KabxC%og=tJO<WPj8BpE1&d^_vF{*u21fFJ>Hmk
zS?%S`&C7LSc3k*qkZ8xEV32deK+-tPM^zw?W7_-Q%ezkG2xbPpIk_ry^^+}^{U(2X
zeO)+{!{I<7)ABh*T{fT37(c2M6|eio9p+qAyQt&EvyF38|NZ&->F)cw>8T4IH;a5$
zT)@(2@ra}H?bho{LRW`fZMdNw!F%#6yX%ulLHueyGZdWLcm(f%?=)jkcwo^erW<u)
zlB)L-=XSncn~NsrJ=N!i{K;ot<Fo7czWRm^8%?F&HFvk=&i?Z9vU}ROIWH?Z4CI*v
zGz2bOy(F1F=OV|6D=ULjA0O*AN;=Z<sD68X+tmp%@d`@qV$rKkmX^Mn8Xl*3Nua^O
zkAp|vF2=1_>gtKv+wWC*Ta~}lF~484`EFCF=FWXJKZ{;oT+Dv*>l~h-I}Hs&7dTJs
zsr)RZdb2e9(!byD^>1&_-yRK$6F(QVDc<Yi3l6e=`gmMkIF-XeL7m0q<i4DnMi>8t
zF0A?Wa`~l|!RnEFt4crkhn?H7O7;5jUTO7R`pr+O{M<D292~x@g?em?FS+RY>BZvy
zcPS}z6GFY$#aF#t`sv5xU$MrlOadpk8Sf@9J$<0a^V`1K-)2RZwGOVD5>x;G@As!?
zjL)m=oHt#tOI|=j$)M<o$Ih3_W=k1Xem-ly)O)(#?t)Ej8*1*qS5)es`Yz`BldA9U
z?xr4Y<7JU#5;!5*xIv|Q<?b+0EH}HP#AFuLzPq!t=;KlG$uZ||Djb#N&|thPvTC;T
zYSo)-g>>$J|1L0*{nXo->;1B&_G}<`$uo*-)+(>aXY2OPoOD;}V3x<a*Ph(RMWwfv
zz7G5O@B4oLBHQ|8k$wdMffZ9y_J2NSo%-NFW2k28CY3L>`!{!-(Z9QM-N~<){q1Ap
z>i?EHaWir}nc^UMkuxpYUB0$t#qpJ(L>2p8?M-aX+^#A6I8}DaNf~Q79EfC^m2&+(
zOZRDa`C1irxr&4hlWo^5(Tdpjo?mR@#--1XWf%QD#H}w9%NL};&{!k1VoJ*YPt*77
zWM5y``=msx>FR`-`Un?2jcs1#t6#hKEv+_Ciu6<Ea5x~zRJCmCyxh?2Nqet2K5lyY
zyG~lLa#c)GY<j5G?nMp^Og~i@c$V3khWPXA>IF`Evyv;!x#(}b>yrnM`b_<o{?wZE
z`lsxY3bsZj#=DD_-2X2o{`cnlTU)cwPUtxciu<p=3-$>v0hyy#@a<;$={Gm4z8?BN
zJ!;aMm1j28+?Ur<syges__Fuc!>M<ZU5jk*H;cSiSioX(a-H$Yz29zSs|(obEt{sY
zJMiGDX))LNW!(Gad{q<~8r2*Y1Wo!or}*4N%i=Fm7k_yrc^~pRS!$c&zn@)YXIy+k
z1sBsgK@X#oc`0q7x;xjY>%QpZ7U6JMkSQQxU6xbO99mfU^=kOi=<RtM8IR0M{JF1w
zT8B;0uHsnzwhQKsD%X>bcd#iu;A!;o{Km{@;ZXMGhT!e~h^D8%|Me;@x*q*zQq1+s
zj$gU-xL6b}m~hPS*rX1M<9dI=$`yCceU;AN6IkNq(a69ui;pqb^V<zj4E*oykO{ss
zL+$!kwb_^WrDyw{_#ndMJK14#+S!zYO{}}$q|CP{TohCP_iLxq%1qA}zxQ=bsY}~@
z`dsOx*PX{&kAa-?@$vD~yykZ<oQOM{C}02QW9M&y$PH4HURT}k(_=3eoAkQ#cnh22
z1D?hr&u{$pe+(@2+{`=GVwE_jz5lK3>hga=jK3Ar7IsE=&KFldc8lxZOI5GlUH10L
z-tYH}ABBd3Q}i0I?Rsx?=GT6U{9w4)k5yBk!Qry<0?)F&U9T@V^XERPxij}oqRMHm
zY43lxo64{+Hoy6&I#YT3y(;aKUkx_>`7dz7uyLVt`>E~wzOHqXo8_@-y3!hzi1N-8
zQ!StMW(zbpG_jOqRvh9~SGke&bD0+Bw0A%5+^u+D0;-k$6D}|Fb)00|yJ)%aYez2E
z)Q0D;ZypulaA05(<dCWR@o-b#-CZ1}kHa;UBmRbN_~P<oTkEs!IX9K&*L?E)b1#FD
zNuXfffx6#sw_j%e`)6I{=VvQ_hGcrK*nT_XkgY~DJO4CJVYMY`BC?JQOy7hw;u>Bi
z&N<5dW#%@igGRnHz9~*HX5t7t$JAvlaKf08Mf?24qvjk>dKj9fZf<zQ$MVUC;ozy_
zl8?MhmdXtYPjwdTU~aS#cG&PqCbp*8;T(rTgeAAeI|qgHECOq6+{N!JU^6a6;li%c
z?3?BHYnP^;o_28lrT=l;a%S3mzf*keqw|I}+?;HV3v3!|zujEE=zvJe@;N`IbWPe8
zyf)|lzSvva^XK2v<k)&d`rxWou~Nl^h69r6a}<})udBK_({H1I<cnQ7ldD#}U*On$
z>D9VrbpmT<6$DB$ofNiswPJC~%S%g7n#Z_z%h!Bpd?6V;+dO~W<IK<f3K7pFFEg_^
zah{oJ?0(K_^~GB4h399iD0n(G{FLqYJIRY)y4-TvAau|}S)jxHKwIRs+xh!-WvxmC
z_Rc(YttsKAl;oSNB9^rC^K`2$Gr~Y6^pwia&r+|}E~yh-<1u3e3*%=NtFkv5+TrU=
z?g!44i>r9ZYWefYWaF2+r}+u4iOL8RXKLe2F+3e4_~OdS;IyPj?jV-cVo_IG8xol!
z&um)eJ6p~E*TsIG>S;coIl_!&GFh2A1uGtPs=KU@^<P}`=i~8%W^McbzRk}p5#P<v
zqHX3R)!?v+<<gu~UU|EiV?C0S*D$k1J8$4Qv^10Big&`bHIYT{c0RxMyJE?6vz!|W
zxwp58?!AA0YE!~aA<Z{AK`fVMq}IN#zCXELzV3$RI*w_<4-ef~=Jde&{?9&}UoRGK
z`hKrky0G%(B-Nrjg~uf`Z>KEgnC7`_3vZ(oXU)g%_$ivf%Ow1F&98XWxhdn~BB`~f
z_gOVft>xLkz;tO%r18b~KTH_cr3cT{`6c#g&*yW-H(NJu6Vyr0$dq8Z$RShtWTK<q
zO7H1<7v(wvPe0qdZqbg`1lNTwvK$f$3w~<O4dj(Da45T-YtC%@=GK$k?RV9#$5rQQ
z)y{mua?r?es+ppI(*sbm<>lq&rw_8r&ymu;eSTLL6Vt&ir%o#YkB$blt6%r5toj~t
zcCK~!t*zPWbFItQ-Bbc8dL+;!+A374ATZhC&XQm8|9^%5e8^v~vH#!K^-mWx^G!0%
zzUFb`=9{Bxy9=&`iX7nx6Y;vz=)l8NIQdn-?Y9|!o~YYT-2eaYd+W6q`ll}Un=5s5
z)jZp3wxs7(jvHe76~0A#J4}AH{Z3K$m-qMguUk^}am}hZlR**pboTu}X)FG(n^P+K
zs-r_8B2Xicoyk<FV|K{@r~37p;W34-iz7o<at2Oo)0<l=%4!I8=fsA6UoS7I+UqXc
zes-1D*$aEFov-`0x$D}?*(dC3f4OYA_b-cM+F!#%PV5{RL9x^87Q6Sat6p9;B{Edk
z+xhyrU0p(HEZSVEuN)R|HSX~I8kHXUbXwc$u(e!zNxFK<?tN1N7rQ;xD&q)Scc{}i
z6Xc%oX!-g-g+D*`*T<NKiymEmZ*TQ!W`3Iun^$$G$GUzLhJ><)qJa5Ix$-d4Z6<#X
z^4BTw+kOdn_oyx5sooNclt~VEmh8Iq?a5?+uk~?zUF@fNZh8^z94oc&^EvBFTeGjL
z%-*(4m*w=VfP{{-ER#G|y<W2_et+FTqYEK{iXj)Pem<S<TRJgwH%HjAA208)f&#xa
za%!Gq!P7FS=*N)!cxsM=kY}l=#@x`C(^$P~m^i{}+O|w^2B|%>>I@GT%W0nQsM0AQ
zMQNeWn)(xFCVQXe6ZBA8d2Y?AngfD5pL<>&EMoFhxmp^wl>N!eKm(Ct76F~&oXneG
z(V3x3rBhh6WAA-Q<7`x!^y<v2OZ;k0Q|*eY&P;$9dXrV);Hf@a+vOe#E0_FQ<~zG7
zW@?<Wzvp}guri;S5M`R|Yn{qDrpXqbxWeUY_c}4ZQs?op-pL1>*^d|b>epZJR*0!)
zo^gDKQpCo#O~3iKXIxbJu`51bVc++A)voJ}&Ij*&wQBW~KI?ZYZmZfx9z2@Q@cnka
zedNBHojkHuA!%o3Tzv7VZC7H%2Zg3oM}bWyj;z_ApPg;we82Dax*iEbr?hi(G(i>J
zv^3RQ-}h90UgF*_XS#LePA%I{Kg9R{aP>WZGboaEbwSP9)$8|ZF|+YZXyq2al@xck
zOd+Cl@#*8uN1H-FtoSh7lK=aSmHum^wsQ5wT#TN+SR_0>^yofO?y!gV)6dRQZD!-0
zv^D#>+rflXS(ekMHY`aGu{@~tWnaq4Ne_B&EOPC>WPBpPKmPBl@TW(`<3(ztBUbLP
zTg@e`^Y{Pu+}moC)&2R-Rq3Bu!>ee1NvA25Wwmv0nDCk=@z2lCPk+6Be_Ys_h=+a2
zsXDTDH5Es_B|jOg?ox_qwc7PERDb1;_xpZ7x$JLWs<sZ)zcotE5IJ~hUg?4t_ZBA}
zZaXRe?*qH>u_YH?y|4Rj{qxrKecLvx*D|lzxyoIxQl<6Y<=2buOxh6hUORl<l-KKa
z`+b={iJSFck)jt{ZjV+3tMC`yMR9j3FZ-IG{QZ7^{skjr-};B#@f`Q&$yPjQJb3e!
z-af`2C$&`xqPH$(zc)3^|E(i+uuJH#%=ML_8@M#K<=vIa5uag@*i`f5VY{E;t9yHQ
zzuEu)-?@E^Jxsg94r*;#>FpA0_4?;$GclIa$5t%K2;SQiY7iJdw_n~q?%kfxem|c~
z_7B=JXWc5n72zAUob9*!<#DV}R{D?ACf#KmVZ!p?3t3k;`0Kyh^Yhv4=F>LiZ*E*X
zvNG*`oy<Y4i1oie<?VRLw))&+_YIrmqi04<n35nmCt`D2@12Ury$3_Xjy7uttItk&
z?#U6xI6E)<qW|Q$>bG0Zcq&EAY*&b8o+P%W$=qs3JCCFix0ud}YX{YCRZnVK$`Ptj
za((}~9shnDw@-5uJ$Q;|udM8Bp*2nA`g^|wZOBb{d1+~x#T}P59#I>(ZfwiBskHrW
z+3XkYPyheAzCUPrXM(H4zW4inpW1poPI}?8>d<dDlKT_XQg*%ATk~t~qgPi~`<9E|
z`e*n1jc`uO+2WhU=WUyBPFT4pU$FF!&up`^A>ygGT{kE_uzNDW*=R1CyTQdytzC<M
zEo_(LiktoarGNdYGtbO&Z=Hz$_i6f>U+065=kNU*HsSuI^YbogaD=g(;s|5$Fb%mF
z{xo=*4`<(&i*ui4inC}}KKiwA&pM|sOS?}tCAco=PH=4qaTopjqwLX<&V%z!_yt@x
zyy6IJasQ&-G5_C}<p;ls1@G?=Si{kHp__YC%pn(pi!Zfy-Cv%4eVz6Be51EKO{vp9
z9P5>Sx?*vk(WYp*gIxmFX%T`7R|8$y=jWMRRqpxvrC|$KQ)=H9xoH(YpH7$l&Dx*f
z+9BH{${5re`bFf7UG1+EpjP(d$sboMM|_l=wrzp7z}<aD)!*Jck=D-=JlNGBez1!{
zGfC9;p<{fz|9m^!&2v9+gdIt6U9rqP^EJ1Kt+ib*Go#=d4#!0KFcuHNRWFWj*(I*s
z+ZcOR=3AmGM_7wil~2Fi`OOs{A8~A*ys{}l_3*`;VLtCm!VN&RTytaY;bnp8%%O`P
zE-Tx$TJo1$_<85cvhOqJhjk@fwGj9ec6Uj_+W7r;7H5OXcLrZlP4L?A<@SZsdb@qD
zt&N_(&Y5?wV#LgZ?aPCOo0dvDm*!8Mw{ps}e_GWm((*koHGO?<|38wAPiDr?)J+^=
z-;%Y1xhILOSw62yYe(kuz2EPhzOsJVy~?1brA&qY|9)q`ulnz?{Qna&+D%g{IX0Op
zXdb+@`(4S(4{tV~PkSw}mz`yjfX?0pi^|{M3yb~SmSFmkQ7(MLmmL!?E_P=>-n%2{
z*7kh;dCw*Pzti=WD`fTFu6aWum__?^V5;N&LKg4!e|J5bmF;4Gv|#CrLaX(AK6RD6
zxna1&;qkQSyp8Yfd{T+HrX6wK_Iu0+x9itd-w{}&;?{mR_lj~v)!W^CuUfgqt)B0U
z3tYBMyh|_j>-+Qe|MwK{3o+gicJR{YwO^*6Kg@5RW6I8Q`qhUS=Ig``UV6Rfi;nhR
zCHuF3%{?dVcrwXb>z~898HUO~8ht;{KBiK$>WW*)!63#9>-kE4ciwAAsdn6u(?22c
z_acsIb#)8nHDAwG3O?Q@QDz*$^vdw;+1cjnZ(Ie{L6becvfubB<htR@8?C?dg8Mg?
zEmeqE=W=So+{C7-Pu)*>?%Z=du9{UoGJBJ)*TvUwzOw&(yZwG&(A`s3S6RHjpUiZM
z{hxDt+gY#Q+LEmamZIyP^sZHjsA}0D_xsc5`TuP;_fMJpDQvxr_5VMgv$Oo_Cwy&+
z@IAHroAcVfFd?1mM<ouf%9MD%zG!8_OVt(S_iML{%4@1S?vCGI*J%G$EY|Gn+uPT7
zE~#0W@G>awbI3aVa=|rK?nQp{w8eC4m#(#cuq)9(-}QX2yje~}PI<|)mG&RjsXXmw
zeSMH!o~NjI-HkZi2#&Bf3*VG6YeiIj?u=9TusZ(lsoZp}i1o+6zT$s-(Oq8lwEgr+
zpR^)o)t|XNjh99Hn!vf^hpXD}URxXe`Js=fJ{ymOz>_5*OCC=VkE>Ap!E^EpuVG=%
znb(^+!s3*><5M|hN-j7Sowxmd!t(hX;qD2qJ%2`=OaEceG*z)?*SS82emUDG`+mQh
ztY7=mdt*<5siyqtmpt-r8;n}~uiq59uz1qf!@03q@3!5}+t_nadaWt{jP@gCIs$F-
zZX0-*msS4eG&#Ct&)-1Je8r}xSx+`t2Qr<VWy;MbcO_S#>ZQk=N57t(vDi1eP7K^#
zo2%pybnjh(Vno?-_SZ&A4ncOx9~AE@MU)+5U9F=qAtmVE*14a=9_VK?HKk^!Y&b2&
z<f-=b>u0&UrT#1X8Ja@n&F5t$vBY?u`u_gDy#>>+r_<xlrM3vHiD?sE?jv}icUk$}
z(&=+*zunxp>%!bmRdQ4B-JNmeqpA9w0;hu0+vfefx;6WH#J8Kj3N|LZoI8D2j{j<(
znMSVbc0B5O^p33pJUBBqe8Y>GK2?zntW0Kt9!8q;kF1<O|No!osXsqGy|m1CHbe0G
zxV=rA&wL8&V)f3?xmEpsZ*XCt{ha#0U$1-r-X(F+i`9OvilamQ?$`TtW8042)s$D)
zTz@)rZsgpGN1fJpZ*53y-jaLUY~#&np*@o_l)F_I9{YCI{Qi{nHBYsV>g{<_d9PkE
z!qa7{S&-_4(xABMD|Wryx}`_PGRUo0YN{6Z<+-Vf5vk`wZYwFt+MbVYPng+f@m5-K
z!DgAcnJ>3@X1<%U|HY#2CllS}G+$4CR>5cg=R-{G{TbU5N?%@5jo`|v={|LJ-t)T)
z>)ki>{IR&05ydje>(pyk!K!67TbI;4KQ}k^<RsP5e5Omv6HVQxO`o(Z;qAWP?>6P!
z+;nN_gQWAH{WLzfZ1`lfY1R(;Ws^VYMsMT!q}48477=>s7xTT9!OQQ+RL@<O@G?54
z_GNfTiDt!;=augjB7Fa_+w{Mi?Q_ch^BLo!S1Xsh9a^ToWM0julM`Rviqq6R`0Co)
z**Z~MR+MN~^ggfLE^eIEmioKn;J#U$GR0>MjY?mISbn>aoL#r=2cvCpT=}WjxAzMw
zyIr|*ZTtSexijtS>wM4Oh_K{6cxmZ^xFeU=#qLgG>7CYeW<!pQ?2RcBjZQ&v_brav
z2Je$w{3YlHpR85Ky+?10Je@a`+<(5nvAN6eW$xzxfqO(;HpIxe-jJK=5ajvugsfQT
zmC2!{+%2b%Zb=A@;EH=*d2dP4od}^_HnTR^8Z|DN^l75C$V7g-9||{~ZK(YGEJ|+k
zs&$?RSEXv6;5of2vC%M7z{5yW{^~u?$!e^X2I1YF2X}qF7VUjAB!){VVqKrYn?7HK
zm2*D@^4#24yL(Ii{kUsuqs5o*DlPTloTkSrt{<l}@44vjn!V2}g;zT!cxK!cIJm%s
zBO@rT*k@Ppy^^4~{2%)sG;v=l(Ee!W!x8rR+1cjX=NIo0)hXpT=w)-n<b_b9GoPi(
z4*kIGiZgV6E!^_XxM=MR0i9U2_~NssM>U+LH|cQ3N?YE@p3-p7$2R#GPx5oymx}er
z<?HtZ%KMni1N)orlg;~U8sCf$gL<Sp)h}#Jc7Htoa!l3BrAEcie3nP3X+}())}-`l
z{=Da|w>GpTSen)tToYkDYdp97Ugfe`{I^O!o>`;9`uf}L{OOI%?ANx6q<ChOWL(<e
z&2ni*tY`&~w3&{D;GwCLrX<WQx#aojlDGcUeWH5~e%|wcWh<*OXvD#MI!oHwS*p+H
zRp)8#+gX+tCe*al`{32p;q0?Bx=%fd0!4L@<h+t3>qe9Ga8|KjiDmcq)#kbj-<aN#
z;5*O8(jsT$3YR+V2(C`aX~Kuulzkxs688m`MaEbeYp(;vFW*O-{2JRcf@`W)eDu-d
zNHN^4)lmHO%o>ZP&_vB0AufHrzrrR+hUwK^DNy2MDt>lm;^uQ!+MUZ@WjWiQsQdMD
z`RgjPwe62MuH7xaulx7cSM69Xxwn<~PF1~4ZwuA8oL4-nq0WCt$;yA5&ac~1kQTPL
zX{op4UaqxEc)r@?KbKwcb%OhbR|}6BpA(*8UB2$io14bP_FvK-SHItDUTm!;8PK2b
zGIh0f*cy#mZHa8nhz<M)H<hhOn4!sJc4i&dzMFMvVYW@7&$=qX(j5sie`PL+ea)Hi
zZbkL?cZ<v)zL?wgYyZ;!YwP`2zYsjAy8Y;qtECzCTe-qomp(8!|5@m!?r9!vla!E*
zRV-f)>@P|R(<!>@vOd87_R6p?XLRm{>@0lj_B!CYQiR&{rZXGXNJ~jfNoQIcy*<xl
zcJ|d(p^NvwW?iel@5iE2jx0f)vqxj=em*^F_eNl%Ug15iX-tW2sdohqDsbFzR#=r#
z`&jz^g!K8f+pc_gIPZC{=Ot+tZO>U-SR3aEb|^*c5{cQI)+<x<;o#AG>YqSCevVD#
zox=f@MvbP@|9`)qPMsc`R-);_cRFQCrZkhKqJUb2=(HwfoAc7SOpM-6!XcT$OqPlP
zz8hBQu<ov$_kATN3&%9hRa-b4=LoD&i@3bZcd}jWuO*vAQaoo&W^9!fFz{S336ui*
zzS!hX@vNSaICF{jZGnP04weTm@orolwpQzV*o7NG6C|fSX6F2?IDxIPsL8bUSINt(
ztHW1$JF;l^W?W`xkx>uOiHP2o!+CC>esSA%-+9mP&S_h%!+CjukGw#^6o-uoE4iye
zBTuqjG`Bf#t)=^2V9gef%ls@dDgjy%s(LTBH_h4}HEmipM_AO7m+VY@LL7o?0_Q#N
z^|`FeqV0R@3oGMsju62$qP*&c5;qm1IE9;@-e5Qs!?DD3K~uugeIjdqOe=VMYwM=E
zzrRdoUJz$dNYHFtU;p>@QyuBImG?SyeD0;TO>GtY!U>v9RhYaq;i%*^;~Sva(GyJ#
zacUE9MIQ`epP85{SoEu<VKz%y#k}p+)0VAHkX2K1PswDdb!K3?CKREdq!skO%On5%
z=XvKZ1?itY_fnckV8iT&_rIfEpA;(<<xKNFIM-5VcVVI|i^2reMz({qo>bo3p!3#Y
zL(YPJUV#mB8s7h2-+7{Q-t(7l&(0K|)-to5fmtCzpYi_puW<*>b2bVb+@vaWgOQP=
zMaW@;lVBhtlfZ^nhNe_+l?}{H0vxIh39U+tm{=4NxEWbaPxDA%XHgLFVmQd<>cYz5
za6pWSW18;71AH6~3R4)GM7uh;1R5H2Sp;;Vl^SIQ8XPnjS+qq2MHLtrqd62Jwz)7_
zD=;($FmZ%wC}}w`Fl`fX*pSo7Qs%(Gw2(z$O@K>C0|QHrVnf1BA<j1q3@lEZ3K0uC
zRxmJf+;CzTybg^`{vgP}z_1Ur7GTIY8r7i>{xe)oKO}iHZxRm!0|SGntDnm{r-UW|
D3V~sS

literal 0
HcmV?d00001

diff --git a/src/webui/service/static/topology_icons/emu-xr-constellation.png b/src/webui/service/static/topology_icons/emu-xr-constellation.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3bea498a4cd6d8a455d997e4833079f3e6b714f
GIT binary patch
literal 17814
zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mJh`hRWK$QU(UbmP}{o08eLUg@U5|w9K4T
z1_q6ZwG(YU4m-#kjSqIcxT=}e)x{`8oqLf|U(ivd2#ws<Fj*hHzfEeqo?YFGA4C;=
zNZ$DB!J{>+n^!Av)HUqbWudvtqw~Kvmu`}c#k=FXtNVACHw0)KUd@@!5OUT?=wio=
zb8EU}*9#al<n=5FPg*ADt+(uf<-T_hAHR;BkzP6fckvgE$jOX$6D#^&wz=+cwAq~b
za?bb8<~0hMN1h*f%oaQ0$Hdp0PUp}0%*SnGoUugc^AX1+!~2JdxHmT~6!I5t7YSWl
zqxg2yp~~*fQL8o_v;E1<9GR<nvUJwrjwDXQBZ^LLtgcfM6n$2^b#=15b+`HB+-L8n
zH#5f7ph#x{kLaYw?EjnZ-<`E{rKh>30OPIroZrbJFK)2D3cdZ$Zrj^moDb^R)@@m~
zKZZHY-gCX#)(e6cw)4isn44De@3_OrHoxTL1eufm!6%+Jd^i5JjORi<cgfnFdriL;
z{$g0NV)aw$2M+`!P6vP6b$qvVboKA=K8yFuM_w<Q%Xei%IRgU&TavfC3&Vd9T(Ecf
zWCjKX&H|6fVg?4j!ywFfJby(B0|NtliKnkC`*S97K6dSyKmG?YFeos1x;TbZ+<H6r
zWq9<>Nl(9DJz&#(Fu2O+`H#4LtHMKL?}q+ed;Qh_J^M?-ug?CIy3Ba)Hp6)b&KNU!
z{(bmnuHY`Q8IDYzN8(=VIB>jtRdoKn+mTM;iHagztyU3VtM;yY&s}Kcv@l@1MuR9<
zD^tY60F5hIQ_p?4!{ab<g7$~!3~?GFzoxvB*?MQicHxLrhGvE~hA%r6XQV#2YzWY}
zGWk@|f>i}F3^&*}us_&v_ka|m0cXOD2U0~FP8GTEwmMxG4w=Vn$`H!1n_(N{8-^PU
z1y{5ZQfv0`Bs3IAF&Z!?upQXaeAQt`+roesEa3s~?#m@^<xXf#o-1&B+0#;&9dkJ&
zSPx}PY1nn#&^_Yp1yP;iCo846TAk#gN~3~{IPDAeuzwIbVAGJgtLrz*otcfMo&kTA
zkH;R$ViPOjZ*^L@`M_$gfW7J~+!6}cTJ5)=+PYNXmqf$);>U7pR|`gkx-WUUP&va^
zL5!<aW=>5_bd96~m%iqd5{G4X7Hs`GNiQk*`-UemyXu%;sx{;@{4qb2C3QgL{)!Xg
zw@UXd{}Upg!C%nobX`1T9<x`g)Ivj(rYX4rD#gDh9P%~)`B%+xYrW8h1L8AT3ZxHA
zXZXi@Ao+V+=%oU7&4_KM)`vzU=sJjUwX&>Z`Wd+BVsN>Ae?bp(g~RIXX0dB>l|>Vn
zALJj<QaHM7-=fk|dCeDb>I?WLG$rLT?onJ}#*kzAS}RD>X`w)o*fgQD>Ktn`rChiF
z*t|(dZGw~k{^d`<cD-3C$G%2-%bI_U^%hPXZ<!*PKkyugXZ+K;VUl-8L#T#`6=Rg7
z?n+Lk*Zd6ol<V6j1T9y~)Oc&<{4&&d`i0p!{1YC9bw$c5KK0gN_|bXbm;bMs)nAOA
z7Y4itmRfk-%<~zKa_ho8tBkuU#by)21iH`atWlhmkbEvhdePObuJb?nGt3i;iQb^H
zK0rgns#j~vEQe)0N~w}H-V-$Eg|Zr)K7Q)N)0E1D-orx9qBi%Rb^m8?c)n%ZwjYZg
zvb8xay!>jyofQ|Vtd>kSb2^_liRYF2hGP@Lc<q_4G0ZnPaPhdfwaSLD2~2OhEuOa>
z4bUigyL8D#sY{Du-L$iLr<p`8lU{M9y~ucazyYnxylW;mRc|=(tL%W52-jAQ7*QkF
zYEFI*wf+4&ee|x*W?Ze$zQ)-^t(_|ZY;*UkhH2N>baGd{(pe*<W4!O6>Xms19(y_c
zSaJarYFSH{UR|?b{`0_jzUtFjSF*2gS{N|<N#c|5%JWwo;@n{MwY$Y>VE}hStN+Jk
zBF}Y2cA07Ic=)j3X5#!e5(Q7|%hM8$racQ-!5*^y`evQeTys7zox>iwS1JG1l?7bf
z+9I!PIo*!_`5rm#rD42gMA+0%di@qz@2amZy~Gq_olv@rUxKT(>hRsm-=-PX$+nyJ
zNVY8HnljgWMW5NKUpo(PY@JfJ;ho&=w=7ESP7CibT+_J3_GtD7AwBa6t5kdz7(Tzm
zoPGbG7q61o#IhZG+_ZF;x(S8v;t)T;)w;|7-cxC{6>f}o9AE7%kj}KfClln@Y{>UE
zL(?*0WnUF*m{(SBeRcDPXqQz7_i=cu+&?OM<q&s5tJ7We&^Iz{A0&fhSDw!Zyz8Qs
zu%K&R^M=|(t`V$>{A=u%NKB3TbylE?|D}}PrAt-4AsbWYU7KFT&9=d5;f0M_!g|3B
z^At+A{^}FE$Qu=0C+@xZN@LoDmFAMBOs`ds&rcNXXuQV$m^or$Kz~Fi^OhNTic?c6
z8$t>`bLuLYR!U@iWBOXfyjUvi<)$}BTz7NsTh8@r>dza|eW7-BSMsv88$`KE`$J9r
zR=?t267;Nof$P$9VRj4Vv0v#tWpB>DfpK4d)^lIQse%8w>)%T+2xE>|c;Rc<GlxR)
zmERA^Gybtw3_W%J>E;8kEE+5`G}+8tGw!i{=qR|fDyc1a%PjtcR;RuEtL&B}{0jHj
zxJsXscWScc7Os%93#M=0c52I(ERS4<@*khq%dF0Ld@7MaTjW)YXaa9vKI0Fm1N$$Y
zn$>c3!|5pA)xrmse%BF>sP*`$!w})*WtJPw`IR9|<H}AgMb=B{6NAL<mY16H-Y&Zw
z79m^gbL&yDaHik_`2*HV_VMpq9JW?AUyiHQD!8`f?>@#4)^+w3t_w~@M-_#;Ph|S^
zeS#QsmWSuE_Y)@tg8XJ0Xs`HHHpqI-Zp(yNPg7Cx3GxkFAMI+NGJC1-6>Y{f0WYdN
zL`BsmY&&sBeT|w$I`{P4SkpkZ({tn(-TuXqdHNhz(4>{$<hH$W0L4hU=iBveiN6`2
zU%2t$$Ew7s{?!_vf3U2ntZU1S$eac8!r=q6GMLtA7c<*4uARjEO0MDkPstDsg9cHq
zuPeAbezQEE5G1KKAt}<8zl*PBjnNzTiZjMrwr#s`sBT&74m+oXeY5{4vs{z)`&YDF
zPUqoDwiUHoHmOYr<5SPf+<HcfC!y78F6SEQEgO#QQNPl7ZED|6j|5(&-1{>XcYx}$
zerE5VzK^#=bjk9p-s5HS%roNR0g$U6ACM{*^V&F>--7*;QqIMMDf5>uHQ{Nk@_n^8
z+$H&TvFPmGUoP!SXPK7dczDi-Rz2(Q%p1B^JPnJAU|bWRf6Bk&zC}psY`y~4r?ux5
zjyC^#DCD}EBSJM|YUi}5cE&XU>zT57<nx8@Ioz5vTQEk~H!FvEL&)n@kENw{&(T?G
z!Nan_Y2oBp&7F;xJ(l{*9p2WT(sEU8&Fj<aHgEHj3N_ceJoQY~lm9{oxLRlJP%3hM
zr(~M;L*8<FL4UINwRKtSy}eGK?cZOLy6t@H%<F?!^)$~dn-P6npZ{6cpP$M3nVmBk
z!d8T<m}kv6@JqSjfA6s${g1-f&)te@|N1EUX+&}I-1E)N?z<I(+^cULj_)de(QvhB
z1N#Q2y-L2HoFkksxJEQu=H_c2Zo1jbGDk>uyT!JCNo&jO)rY>X-tmz6_txSAYtLPu
zqH1v~^}?!;Hg7%{%WV5}lsRHyTwt$QNNd=|Xom9%xwnpUYOyxg{yLDtXH_ZicGpFo
zr0Bd8TG8cVcO#j9x4+w~wu>hsl&QM=`Ld<j8$rPu8R7n?j(Mf=$KWMK`>Oxk)tGP2
za9Ui-Az8HL&-YTN*9`(U3)Vf^RjeBR<EyRiPN_9>tH1WlcNROfZSxhYu*hjwi_Q7?
z*Gv=p$eqwy#Tn6bSgRr4;^y(Y0l&W~K36;S>Qw#uElo!8(b0ZWI_-Q;=ZJ|dxzF~2
zai!$pY6krYTsL(eep%gJ+LSj_@9ma5t8`9V)mHc2xv4v^-84dQKPc6(M3hEZvwQRk
z{*q~7SrhoZv?uw_Uz=C+R_DCk)O^EW&E=01i~oj5Rm^;E>(HGexx7F1D(8Mtrq{;l
zmSsj;N&-aL*IZ=?(<u40WTka?x?u0m$irJExyh^$c|5CR+Km?G>l**v!e-w8rtIy#
zGfwrnk{?sVgKE)=n46kv>vh)f+x+7_wEfkct9>WWCs{e)b*yebzQ^f$rG3nyfERBR
zf(>@CMYrC5azsjH0-Gh<o%7D;E=jc=-Rs7=^yC~<wF$h3s(#FMHQhDMyQV)iLT5G0
zf+?wy*Am0RriNWr(><N)q}}vx;RVaJ>v|@~X%`%wvvtb<S9cE>KG*B}{95Mj*7Fk{
zMYyu->|9tY&JZ^B!RG_7R#?8C<jT6{sLX~fF9gKGG)nvmGMO~(Pweg~dhNA^ukVNX
zrgd&}X74!p{A8`osiOtgIA%G|*=yy}TEE$k<ILy3%Tu?;mg<~d%cFH+U(Xefua<Ws
z-(JmG$rQ2h^*Sb<8SA+Comnoi<=lTbu~_-HWng+@wIJ)ET&HKO>hJi@&9hlGXOrxb
znoaT?*VMOsIJK!@-3`+#yb1D|p<mqlT(?*xnly-VnKET}7|d|$^4{B=n#CPv_ac_z
zgMgTT_=d6{+x0oueBR-DYQlZjQ|iH2FBUEdi{j0@nd*FcXOmpSdyZ@JnXzHFKHg(o
zbD?xnLU7r;xmJ7b6ui4@p}T}LD&|y@y+d+Lc30Rnm7p`Ljy>OddZ*j-tBUIXwVhtG
zt@%2g>F@MiNiPyY7fbK(vH0($ojtc8-+NOwgLcW?H7l9a|H}kP|EOk=E9kMF{y}Y_
z3Bv<Zo%dN27R+cY-8Qo@@6j^mYnNCXOP{QnD#U1cbbkKl2xG@3bEk!^lWJbGTJ<^G
zKcDb`!rj|sd>FJ#V%KQxtV?Zr$=9H7v5)P8=$cHY{hMd-S!{_if3e0W(ps1=WA-`K
zJ3AFNtlF?jNHXX`?WFts7ask}-MTsULDr_P$96Z`GyM>@e{W=8d|TuI*VkP&Zohfc
zCGWa=dG6@F;^!^-c2iDBTblf~OX15}KQ~Ofsq*~7zGCU=8KRtFYoj!8FV2o=2z6Rv
z(cxQ>y(08NQRhM}@y%z>@8EcFp5>bMl9ZcXyZ_Gwm5JFi-rbd5!nLHIW0fS|{FCc^
zN<wQtEKRZ5@Xk6xlyjS@`NXN0E}RlNW6g3{>fnmxDh}`U8Ltk_WsUQVv5yS3Qjg;O
z)0y|+yazY)Z%{o|^KO33F2+Mo?bNr$9N3+4#>c+p>IR`D_ZAg0=lAM86-g|ezAkm*
z{&>ez(?8wLj9SUH=0L*T$Y#-q$L*V>PibqXxGmJ--ypN#Ro;)ilYVaqvf9t^L+-$R
zj#bxfmU#y<XkXF3v_$vf(cSI=cOULJJL9rWVra`#tCgo#gzdFcSSw_=JaqF>&NT_Y
zWB1*&xL-bf+VS%}uitF>xjFCS4!(qwOV7`}YQY-qdgb5oN9t=d7+(u)EA?DjV)x<m
zUgatApZ;FI_-JnvC~+}OTh)2bZPm+v`X%hoEhbJ?h$^_&oRz-!kxR|NjZPi82b#W}
zG85l0MSkn)lYfkLH^22}2y1=6lHtE@#N*y-kB?T3UTY88O=Su!zxHfb^<VKVYw8LM
z?l&C$#T2pdg5@2@uZL$VgzReyO^|rzaz)NO_gbves#O!@R~b}s-1e?u7JDMs_SXN-
z0?|zl7v66DxmnKg^@eA5*X0s-@|?aY)jIY1$KUF<OSXJkeyDMim3U^P?t!f8x1VbH
z);*dpbAapXEbkRnp~7>vXtnP-&8hL-Etxayuve(d_JpOq#(uw|Jr4fLjA)3{?#!;a
zTb^-eMUAA8L8xdcXPA-u+ecf)H{CzF!)8s5ZPm`k*%@or?K*XS**Qm!gjOf<?HgEh
zLYZwJxrEiONtfAQl(B#QH|}S<A5AGfFiUX*SH_(eIs#g(k2Y<2zhLW=18=kIS1#MD
zKmW0L^Y5y!uf(=Ib_hHAw1k^0p><c3s(5*jj@n}HMX4pe3sx~-mS(7b+Ol@X@%Z9B
z3r)AUa6eM`9#wfdcaGk(+Ng-y4WYZY*R1uuq4whRyemJwMBL96U0Su=EcbQIul<2V
zYr>dQRkN0ESgh9(up;;>yZ4_EnPm*wzaHo=(pq!#2zS$4=RBid4I8Ju<S!`tzeh=T
z%J~UF$}DSacTLpiIKW%tclq)xYx7M8p?u44sI)x|mf)KkdbRMZK2yX(zv9<hl%9t_
z6)~4;T3d1Q)GD)$B4Qj9;^(%87QVZDQL@j~b7uL3u=^qRQtvXp)@{7tnd;Clv!?3Q
z6Ta4UQLH9rT^GV8TORAnyR_=1`htD!sY~DQ`Z0O_n(A|hK0MwM=4{Vs$$L8YQk?Vs
zn`v@lIsB{}oUS{#E=l;H@$d`7w!cs1?i%hi@(Q`*z*Vuh^J<C9f{+V0;{NIA-DX&5
zIh%P}(ab9vNphMu_FYXB3uDk0$(m^T^!2jU74tT2dC&A?j<f0I_lIs>$p2J%Yfa3N
z<D3(lF1t>WN{zki>eVlyenjL*So#dtB{y!={mEvISa@$T!_uY_t$E8=ac+KBSh|EU
zb{#L%Bi*}(TPJ3@$6b&}{MxearGk!e9joSreND#>)M_+{zB2rJ`RnYqT-8dB+e>Wt
zR!4`nEj4;`;p?n?rZr`2(l{gHFZg~vP<49aqnPsr?934h<u<Jn3EBVn7_-wW<EZfM
zKVsHC%f0mXmh-9kQ4Mc@28Tb~%yP+p@tK`1oBpU(#H?ai_11b7TU2*_A%pf6>re0Q
zhkJ<H*|)D{Tjjf_>tW{Vo>$(P{<o{^_PZqf6pLER62`V#$I3g~duRCS4Oy(&54qSj
zIPK+JW4WuYp5?=OhB|ic1E*JMURd?1m$%Msm5@S5?g6gHTW|56p2hH*ZB6%PE7$!?
zvZW4iCA3z3u@Yw3!Wmw=WJ`ZOx8{a_jN5A69?$(<Yb~r;yZLe`Q?XPSPeJpCn#1?E
z@7Y`k3JaNp-V0lqV(s65+v~`cqF-3Ez;!e4>i;1-Tarb$Ok?;n_q}GqTZO6Yb<I;=
z)(L<tv5Jq(yHb43bMMK|-CNeMXp43PvwDkmRP$?R7m2=`)>kWeAb3{;Qy6P+=c0uS
zVJn)Kc5&_#e8~`GP&HlQ64(6pvtpN4NhLh3QJ-U~s-4XlR{V06t~l!r{zOf&C{>#t
zZ^Z`DS9}RyFYlf0ddh!RL#SiK^3swUED=$m)qXd44@4!eRGnsZWsCBHx-d<}Qt53L
z0qtA=a<Oi3l705=>Glge%1ae`6rTp(b-k6me8y!Zof&mAX8#do^6pjY+Tg`CcgLkN
zi3Cu7c4mFf)_YJ(Y{lh|z7e;-Bu4yR$=c+hoe{Ke$DH+x1SB6VWC(k4=vt`cHpU-<
z$C<x}J}vVuVK$%O#lK$3^yV4w)<;?A7Oi66;KaD*LgZS_opntU)_az6XZ}9J98vv!
z_q+F@*IZdY@!2yjYzWb45VhLg<?(T)qlws=-DekG3%l&`aW!XDJlCZBgH=CQ=Kge?
zb1i^D`-)#e?}egYLMxY?Qod2Qzb+!)n)Pvc!pxWY6Qid8Z<-P<x^<xw<C*~PrAyAw
z-mq#O|I1%1s}70iuD4oq@|oINt^JxmRgXt6xze`SVlOE0r*62k?D1_6=}G$+dt0~%
z^eV94WqfV*nNM@R*U~t#A2-+>x1N2@3i3k0>9wnsf>s^c&hU>{v(<5FLugt=;VRxk
zuh{!4(?b~rJwW+<y295Dm$l+KHQT*p8>Y|wz1(Yd{*NDi2ed>EaK$crWtkxQf@xoi
z=&ISzC*0ot_Rf)pP>{zrpUTr%?{%=~{>gArE7P(JUEKv6drlemiJ$v>yL`PMDC*Lu
zJqn!cu`@{6<KQPpC$Fml+Y+XVq(p|keDqg6sH#cJFl3JOj-GE*mHAqkBChj<oeG)X
zU@ABF!3qV{;;QadlbFv-F9~UtzndMJsG6*`q4xme>Hr4ql4t*C3R$*KxWwN!QOH(a
z>1n{qMNJKxJs-$Cd_3)y*4szft55%W)ncT-Fo0oo_f`JYQwq4R8NC+E(e91P(zMTF
zy{4DV+WR!-)$s<+JNrS=W0X+acE#wmbf2f49and@=D#lo8&^-Lw%yqU383d;(~AE-
zd3N@YmYPPIsr%|xF4z5K)9xvh*3ES1T9D5=0~C4IAq5L&wQeoi&%Anxfn!JS!Arc`
z5^^`iDWop7cfIAbx$nhdajt~csGP``^~PQiwl25qK3hkHtojpK@a~SDj&tq23BP8F
zT{B)%5w`mFu68HJHQDPNqrxV87_M4BA&fyZX1<FSdvV8>L)*_S-1W*kBgbJ^i%8CT
zwlyHjS1;Xkq<o^5#-DPA{)s{2Z4-p79TV1Gm{rAk+v_viwd?*@g}(`iihz{P{-@p*
zdsgx4@+ywg-M7>`$~ac1m;8=X*m|Lg+51~h1t@Z}R<H87onAJP=|#4Oc8#@+wukFy
zlY1XubIp(D{H_m57G@hl?iTZErY5p#u74%EX6<jOHIgg0onKKJrc&F+6tOUP^?BZ-
z^S$`gw0gF4o;F!8Y_;2?@k_XeCU<_q*Om7aj;@Lm$YS5J$_bPm??^eFnmnuNsc)~4
zpL@yUx~DgaF9eykN;T}iyh*AhckRThTYEc#L8H%NOxbLj`LCoI;+3EJYbyMk@}P=)
zbxT0;{`+pX!aj>=nx77j`B1tRZ0ePu*=y>SoZ`IYw0Mu^{?@b}gH;#2q+Gp%H5M7Z
zbx^SCxh&1ax*=+%k)x@X#a;C|ENd*;HyY_!{OhX^Z@RjWtJNu%W6hfx$6w2q)HL;M
zx|BXas=v-#JfLuO=JR8jtQ(p{roUQT8fx*-xZP>(9RHi@&qCeXCB0<JoVab4En;?J
z>%JLscSo0v@>L)CrmIV46&LK{y*<Z<PuqOY!G(Gz+8g%PMc4SHENYLkU4G@1@AX{G
z@@A1aeHMIoulJpKtX+EJr0&5-jzv?uSf<3R<XX3^F8EmeF9pZ1GaffeFK(F`B;jRq
zFLenQ*ZK*U1mh0On!pt?@r7j8^*NXRU8##ZTx;2#b-%aoUU}8c140d5eLqyo*<Uz&
zO_FJ0UF^*lB3d5ApP<R~@7;sqSy8oblsDAY#b5YZ&C?w%dZ+Ns;cs7Tp9ef`N#C-m
zWa5#m_~$$Qzv@}VMf%icyqS09_)e2k3x8!*CakR6U&LI?{$9BxAm~#n^J;m`&Z3sW
z`JTJ{ls8;^(cBVt^WfR}TVijRiK@osDJ*4J^J&TJoomb3^94iv=d_kip1+X8+x0@3
zROy;P=1Z;-U(eUNB)9toA7oq*9pvuy&dvU?^r~l5vzBHCt~f8rDHkCcG5@5m`TA>#
zoTpcB_;f4$+N-yl8ciFf_*gcFn0}UfY-@EfndRDo&)fHUS3G&gAkA{1ddZvjKj)N|
zUU}5*d*GMt@mRj4Y9bsLzh~UBGk&kI?d_VQ86Pe<uDbp@a$0KSyIHT>bp5!3dp=gx
z9H}gwoIL6Ji$d*7rRkobbHYC~Cibw#ouA1a|7A(5s(jUj$k5_BU$W*E+@5>I)6P9@
zHUFOLbAB&(D!tuuho}A5C*7U956&x=@1J~cdEF^%_q&WG_iOJyw~vUO6t9rGu+n$J
z%4Xjcn@t!JY))?~tXuy!WRt<R3paYU39EE_g<a+C`|Yvu%I=z)Y15|lG%PBv-1~a<
z>wgz2^)LU4e$VM!khk`*m0|3wyzU_B#HH3(Ro3iTzh>2L%i>V=E3?<IvhUrqKCZ0s
zNamsUjEY~c9dydOd5}}Dq2}+b-3GH)dTD1ip1)rxHu>K1aQ_LCd#@&nSFgCZN@{WU
ze^&J;2FGoZ`_@}Hnpb>&&B80>w#w~y$MydvYi7RNV9apJ!m`w@*n4TONVwdi>N`(=
z>lEevJ@s>G?{{0~HA4Omgc<5n&O8@<7<$5y!_wjDT7`Tj{*UJj9{b#~jk45d{3Cj8
zN+N&e)ORWgycYNW?AQ@BRs0>(nxntX-kWeOsV~^LW!CQM*4Ni}N;#jJ|GPY5?jKHu
z|3^=*lfDth&Y0aX?_}~4rT+g7TfVNo&!}~}_s^d*_3sy|iWgsteeHGjr@meK^!mj&
z!o!)o_3m_hUTE(g<@>v7-2)MSkImNiRwm4F;`P11y+7}{aNRb+^k=V|R)3mr=yyM^
zS4QjH)R^+}Q2sT(Q332*7To(d|7YK{xvOg0USGGpRBHTWUAtzKNc)zMd7rB)Pyb)9
z^ZIm%eSdz>wJYWuKHc2@V@FTRBgyBXWoQ0qS#1wo_d;2U<M4(@6Z2yumfX@k@G0!7
zN`t=V|Klah?+@=1nJ*f2ys1}x`-4B9GwbXh|M_0ml+n6jVs}+{`9x`!^Vxh$6)F<0
zax76k^hP(a;)UKL<|F_1=e34iJlfV)dA9F@?5>AS;`<i8PCb4r@6fNny7ntmQn;oq
z`7?Wa(Y(s3^W!ZGG8Nw_9$d-y_`#frX4TSi-VJ{~y%P8MdP3gn{;rC^2vh5wdsL^~
ziA^~4^Vcqk`ycdnxzDKco{=S(z?>PH-=%K*-tAh9gVB}fRR_bS?p><4eYN~F$+)Lm
ziyBTx-ka`ie&qER?IoeF-ZT7Bv|k=&y8g}`A$6}gx2^cTa^83{;q{LDx(8l4bJg8f
z7TEWM{qigCYp;Z>4#^%ot}gfCU9o(aQ-t*7tzDP+qkBVsxundC=htM5bn9}g^OMjN
zb@=eB?fOQs?zqFdM7Cx}hYD`v_|Q=NO8&((-{;A}Yv+X@KeP6X<6pCdH`yQL+vL0F
zU9pypC};emymtEex%shKtt+egCR?BTzVG1Vm2WCyS?VOCtHrb#*Sub+bNUs_HT?}o
zC)LIoZ=a)W!o52GnXpm)Bi{{k4@f=z`n%!URe6pJ6U(F+)gz+!<v+_kH@9%!_U#*%
zyvSP4<n6uS@s_B4&+caQt-E<3b?y~4_3)QMRgZTWzn*%1>6?4s_eAS`e%?Ie(sifb
z9;d%*?=dT3o}3+A7IsZSXYDc$?=3NpKl5L>m2%n0S>$_y_8b0~H!rlFO^vVovUBpQ
z2TML*oW^@aoHgv2^#PSNVpn4CO>}z_AAgP0mM!Y%<F!hxC$3IR>lA;J9r174tzGR^
z@ulg!I+wF<Ju2OJZ1(h`d29(!o4n?%csyqfx6G~cQM(`P3A*$(_t=^gmMQC)!j4xM
zcFpJgY_b2@^SW~t*8-O_y%q~9h&{P*^N))2mqMMiPe(@HZn>hpL`dJCbB$}?-whkq
z$!^GExn`Chlf6Mr-hIR03iE`>`@$ZLKi~h1lAklRG%!Jw<AgQKwd*zS_pNTaYN)sR
z(u{WktBg3rF0}308pe=4Cv0keByZUT&#%Y1%AK}`zp`BTRc@M$_{Y_+IoC0lFTRwP
zn9I#vzr6R?rY&q2Bz}kdI`fNl&Dy$iin;4|`o7NUXxQ<o@@Op6tngYJ`R|!?&wY+4
zzxZhCl`w|vCiY)PW}cO0Uaht+vG+ibC~IiI4TmXJoHMUg7za;(%NwW8FX<j+R?&Gq
zL|%76d<An2pZ4vdX`HW5OWbW+o5FwC=!SLk2ea*6HsYmCzt|ertGx1B&aip{^R=Fa
ztB%t`<IXlLb*Mg|rIOkFUb^n;vim*PcWyctDwipy`Mp3UY>S{p^`uNUi@OVEn;y0_
zYw?cA+~1IGaq#nolgV-?Bj<;6=^R~N^M0@9ycbEwZ~p2H3u`>SGWOm2V#9R-92slc
zw?2C2)i~{PZ8@)|LtN9-LSDtA9^x4@e`d{_Z^Xo+V`}iyx!p{&P`mxsbnVlh*?5^n
zIo8CRZfL78s^#n|QfFG-`E!*>Pw5hd>=J&ixh#66&+n!7JmU?T6|wlO9BeJXL35ep
z4UeYuTbjR9Pz_$S=Cqbyc-PVB2=lqOZyF{}6YjHqTq&^O8t3Y1k}S{Xu2?n0;MoGx
zYpUW2jN3NtWV_uH+qbiFS@&nF$R%9I@)eJ663Zx^ny6i_<!a+_`i0>d&d#D;Wr?0A
zzY3pQdrIx>CsXg(0^5{6-o;z&rduA5TGq{!EfZ$X9$O$Tuwl#5M{1AxvNs$#81Q0A
zw!7)Y_X0s$>ldxnm^oYi`_CUNK?Zd^n#cWDU%Z;ERxiI+hjGJ&lb^N3i!`ma7f5XD
zesZeOl!u#b+U_@tq@Q^1>D&@gaD;n>wAZ7uBc@$17F)b(SZc>~%VzD2Yqf1&?+$G1
z{Cd&pwjJ|^uGo^eE}Lh8H%>j98Xe*KeDmr#h1+8e>|z#s!FTWZ$M+TqtXurbey@A2
z)Y|15Huv@A_WtgGRZbo28CE_0E5*3I<8im^Dx)SR(YqzZ8Ws<>{rTZ7ZlMvcvqsx*
zg>mfGM~j3ubeXcOaGK9FO~`Yr>2mq7=Wlm(?fmOu8M<l3wTYj$e7k6~F=(p&?yNe?
z1o4Xzul}6U)u|8Q-MYxyrtYbJ$C<l~YKJ#*&1H<bH|f(}vwr682Gf)C<3HTG?ezJS
z0@JnSSsTk289vzUTh6ngPd##4Df5<+hR}%2>x=KacUm}kooxN*Yg!Kz_)^aP+g5k#
zg7fxo%oeB9_n0J9UfvPyzv@%gmD>gK7Y&rYWL_-_n|5l=nVlb;EZKFY3dA{a?O1>4
zQRLZeZ&&or`LxaI->j0=EnS~A5AR?4yJ)@khLSf~3Lm+1E*D>o?OAxC@Vf0B)zWtR
z{--g!Y&M8ZC<|M2u*>tBKSP+g*`29|0glpDV)Mi!vQ}?x^?ots;-lRS-^|{A^!qNf
z(&j|gyFT#)T(ZyKT}e1O*LcIC`d6!07TtceXirPXp%>~)dN00D&~Evv_I_d8vfC{Q
z=3lpj%t-B?|8T?91Gf4b_;w3MylV=$_KAH7!;AYBfme&4)oD!GU-l(b@?AN{ddG-!
zQ=;y!S9+`dNA$q`%H)`auVO3a7u2qL{#3+j&z-<^QeIPYZZwomdL_Y~Ej-O6{IbgV
zO**e19H^FySYPqHTK=<P$)!ClYa2u>WNn+i8izdpv}?1`v<au!>d()9bibe`I9`80
z?~Cocmu2@X2(@R6h|Vb7b-`6<jqJa@rwVcozltv}O3M=sV=5P%ekaTN%G3pucAIl$
z3;YpS$@N0~Pvs2r+|o;x$E6?oZ`p9~VTtaBD}H`Y`=4Eq-K!_+cT;`Mw2Z`eWkMTX
zZKw^5-tfstmR%=(+qH@{QL-V$R{~yGd{tC!Kd1PW`48W<!k=b2)lpLq{9-)Nzh&J#
z#n5t#-1Bx*Kg2Dv{&6CH{@k?Gr_VySa&Cx<Qv12*z^B#C(jL<7(=XmAT@qZI!|J=W
zDNrdRbocJ1j)wxSdzr_D3Wcs-d!O-#`Vv30SFsfy-bpjBUEyc=$CT}}vB>RvR{Mk5
z4qfGMFKwM<eJk_hRjC~Rr&j%yQ`-(Ysz*eWmM_rSZg_frJ0nl&hW%^f^0!wgzBu=N
zo_f^Q9m?vjtGu5ksZBIHQO}pXwUm3CsC(|AXA{Hbgev`HUE_W~QvJW4qPbVW+D{g2
zj65lkVQ)6<eERv!v&u8p8@BXlZ{M(I>88FZ(Tn6#w_Ba8$-VT-`|I+2OW|(<VQkKJ
z<vCY(-V1ts#kz#?|ICkCrh&Q#yiV_7{gBS^|KR)kMW5v6DgO(3Zd%c?WodfnhoIEU
z|M<Q{v8)Mi*~T8WH@IQy_6=Y7_pz^@6me?PnhS~L%%UE%TU1|6O<X!pJ#nu8wSte+
zd>6j!3eD_3Tf5}IFXbhx7WGT6Z{lv%IIwQU)!;be>>lUXBS{w@U8r7Saf2bKd{rWY
zE92t0_3=}yUrf#@zf)+}zSa8m4!2dM>}#0*FYHff{acsqeMRw_XoBmFEiQM@@4j9;
z?~Ch_sdMEoL~PbraP_y88`qli2d!q*pPZjwvG+~k9>oQ9OF|9(E8aeQ<SSm%e*gLJ
zKcd(6e0>%g9hny=E94_><EMJ8&SAFLrYKgOnf3gY8#Zq^HLsw&d3D=Voi&URkrSjh
zEPWE%7r5l=;pZD{;}^bWToc_B`Byop;BRz<E1Pe?PW%6?5B?vxl)NoU!fS<fLTDnZ
z`u?-=&!?NNpQRJ0*%*_k$e7Ka>vc54bt~K3(xC0v_kT!`Klo~S{i;81yZzqCIc_=q
zIC%b+z&^!@g@#j0L(N|^Mr=w*+53GRTjJa~@=QOv9v4TL?G{VFmT>TEx(DMo{tdG7
zYxiyZxokgo%R!x3=h9WX-b8FPV$o`O$)r=8%-VZ3+*&B&Q|kB1>zW6Owp{UCZvVVI
zep=|(!@K8C`f%^#qg~x1K6_7gZ+dg*u+*B=;1%CZSsobQOW40a`-kcJyPOf%=cvZr
zzh8WU^@>-5^`!o-NfAp~KP#`l=(}r`@SeQF&SLMv`?2%-?G<yatJrQAg}hElsQmnO
z?e5z?MtUmOUvE#Ue^q$*)a2RP`GLjax2%__rrj01{^R_$ZH%lB*?(+bezx>vOwGCX
zhTT(-zGJ>7yDRFxKv=wGf{cOBh66LM#xwk}k9!@u#r$PN+X1^ZJDb<NHEi1UX3zBd
zw~lX5%6s~3id*Z3sO3w4iaTY`eYkL&TH^LgT^HIXhJLnH|DwEP>f!2)J1Vz~g3Zz+
zU#6@R42s%&F-#`1{`DS?_X@gVUk(eo|373M#VQ}(awV)+a91Dezq5jCBA?Y2EYM!^
z|0&D*M(I6n2VW;oy?*w*%y|pX?Q^nABCQ;}e9l_rPi-<j{ditm=ue&45|Bey&3<!{
zq2lbv@Tgg@&k4C~XYejxtlYHFA!Coa%C8AwQFYwMp8KE4^#8!gSjzZX*8j=(mh<1=
zwXAkNr+rK>PiZaF*N^4yU(Vh?@X4d*q-5-q%YSY!YQC~-vzhbVg*F?e2<&>N^Lc;q
znZr%5r|<nAa^O}OL*%mUA57O|x;|V|S#(F{_mMfPJ{YeTyi@NS<r;o&rq1ehOw<0{
zUiF({warD<2;SF`^BRn#UfYRhod5Ms`FLaCv&^eApL$)YKHdE$ecqMjC9HeRev~$p
zU&xeekINT6`}^3+zP(0I=YMFr-<*3kV#(IB7dj??jSt7ZQP{}0Q{Q6y;n(Y&BK|&E
zw{ZC$!MLe?3Eb{o%4>ITaAV8PS`)WWRs4}g#q^Dx<xif6oQ>T+>v*?J{qoeWd#&er
z?{?g-y+J2?wV(G=53Bo)tb5cahFKn)Gdtqg$FCb6`mJDCD!k1zV$G+&&n)kK+BjLS
zNwzM&;A10m%^Yv#(*+&Vu1@#3dH(T+S6$v)H12<{xbm~?^j%5kxsUkOB62@HyLSF{
z;f&;Y7ph)5an4mbdiBbl(&po<WHw2%>u-JZ`uxGwGZ!vQ*p+oxbIYa|YczK@&px-<
zX*=`kQ~bpq4QoE}eU-d)>7#R9{rqXCETo!mwEFMa##FEE;k_^aCx10#G;hs$;rb7q
z*Ka-iY{Y&vZR@tF`%TX!|KmEa{}a>1tJ{y9|IIh;tM&Q)wj2qiOIX&Jnk?I)vrF24
z>EVCnS+h2sd|Y=@`ag4DbxC3V<!XsWQ8f)yLngktvv;1`=wYDy<e1+2r_3_(llQ%D
zVEvxhCnMle_;kyff<yiVJc~DW?DvV~7i8VGeXi){6Em)8r(az&_fg8V^A+tMZVRTo
z6iry&Q_Gii>h-L$u<Kg=_178SD9pGhc<q$j8s1uYsncquv$FUWb?L7?BxD(S@2Tus
zx6r9C+PCt5UbkSKGyj^@^w7QK4ErysygGf#H0Vv*Z1q6x&hr*4-G7!!Oly5tEmt)^
zs&j$$p2ImGSNm=8xm6`?ces)HsdiMa=&`5I5^VX{D;n=CQ~hT5-9NtNZK#b)%BA?F
zTNvZaosZUj+x;XhsM!2&YMlS+4WVxmBbrL)8*|ufNHKi7*zjVNaM+w;Zdrlmy=R_y
zq#j<qby|$W)x}aL=f*@vx<=ey(ACZUc8BoW(+9U?Z{GCIrSwo5<F$sZ57w+=j0)X;
z_vnTfYYxP7Sml1b!I2RAv*r7{s%f*&+%5QHYVIC(afkEbGucH4BKs>7-tOM{M7;Y?
z&8m3wgqJK&!|$aeYCO1pesXjXqtpJRjn9*U-81f4ZohkcpYQ*D9Jd4Q{Xa(^JSSKl
z9^A8zCE9I%a!<BM*qa>fABCx_p6@HuuF3X&c3pAdm*{z6?>@^d+Q|PXaQVFUp!PXW
zoK4a${t~<XQ({{C_0-_~)0nS`1x={E6&YG?nOEo|cxdv5O=kQ*=49UJy0V%fY=y6a
zT~YksM`A_At8cxWmb(1SbZe*bE1}b;s%pQt)m7WMk$*zbX0wE!=}|#)PF<JJeq6Nk
z;C=2xuMM|5<?czVUUbnb=R<Dq)ulg<EA7t{N;^NXXj@97?}bpA#?Yy2zBXtJaj|aL
z<#LMK+9}HG-lE+<<}}P&__TC>-hxTLuS6)A`GAJOz54|l7;ZiJ?!6((JA1>Pd8T&m
zsj1<Kx_dtdO$hmVWJ+)Si#3}wrU`N-wCd@E<}(CwwIs!PO}d&Emiqd6a)fI{qNS*a
z%!BMzMypPJbYlZe7Va|G@I-HwXvlo&Q~xb3*sPeY#V$D#Qks3!B`S2y!LR`42+*+f
zp>>O<_59^palfYOQrsG)H5`wa(`V)?FZDWe!76&`?8?xenV>0#<BnysrXCbp_{H+l
zH#yZMa*Cp^SM+|B%V-7c;JLj^<N#<UM0evJyQNA&T1S$Xe0%Y@gtL1?&J*(uLK^2^
zWNF=ZyR8EnuwL=j%8BdP|DG*TD^9IQ-tcPD<(he3X6G;cifY<wah>g2txJQQ$N{dc
zo~u;9sWUwnJg&P$=cl8SmhzE2#nRfF4O3YwnYDLs?h^Umbt6opK{Tto^{d>pV;h*G
zD|M8XT4nS<63Hq5rx+x4G@D_+QZA>^f-44QB3ucrQCd^~-e^(n%M)_jKJk=~|G_YR
zciAJyUO0(mbe>f@x?`Vv^5yd$7QCz*oOCCC+7gmiHF@1#l{H&0r*Fu$-=1*R&Mh%D
z_t}InspT()?3!60uP&VB%(x~%`|cs-^vp)Rd)85*r#Ix<-QJ)Q5;`?R@ra>axy-f8
zdLXNB>0Lb%9+TD15d3$oWkm8>MfSbr8@^>f<O0nhcyHcy<z+f|rfGn0RyxO;<1${=
zD}*9uXXvQQg2FU6be~m=%J#y!_w$vH?%wkEId4#2*uJ1_d8uw5zR$Y?a`Q`rZx(;(
z-qHb@G*Xnk@F>W*DRl|Mo^4FIimFrOp6IMeY|53&eEQM2$@}j5@PxT_HU7H-G#W&A
z32e9$njv{j>8!bQz}>v{ic4l(uVvW(d`8KHS<6MY@oR6FhQw;2`1xDU)_5qa{P>zD
z=++Sho#WY3E6<!|kKon+y6U!TNIM7X2B+yNU+Z)Z7wt%!u<h>|g|#+zE?vEQn^P}l
zzdo;|BWT(n%9YT1OE33z;Qb?tOsgA?i3M<bY<*SV`Zn37Wvlw<2VJ2jK$BEOxfhF8
zT|TtxV%4mcuR&L|9$5q>#GOsBZ!X;$SM+YtDf9NLAd{lBLJMxRtySCSdh63?2F-b<
zoY^ZD&RKu{hq<&z<Il<^w_^4m$|`h?(FP@@5U=0>(RSM<6<5V{EKB(^S&JGDO!~UC
z>eJ*cJK8u_h1T6|E)@n%&Mlm_(ycpFaGKo5Sz^<+{k^lGbZJ#g^SMW-CNzDI_INt`
zbqW90Mr%-vM)B!fy&qL@?TYM@NoM^MwCqDB2Fd=KAmpF^LXS@<%zHzdL^k6Zkcap*
z=b!Qx2tIe!OtEBgvedOFrE~X(tG`KGm%!$o#i~=TW0la(6tR$dwUa>R<*!OXbAQf0
z=X*u#ky*q1jJazUR6dt`S|ghHlHY4~M@2X&)(kfAP5dUdulZ}}9@p?fzHOPmI98r`
zz_fP5UEzkMeD<d4y{)e$K&8Z*G=oU>9p5H|@w5Ms5f#1D9BLNou&-kZUt#}(;IHkq
z`{sqImnWFMS+B)e%96Qy(yDNgN*k+l%^TR5BNo29D3{}(*tytmwbzD8-OG7?8C^1)
zU(fnMcg_AsVrw_CMkGfxzIoB5v%c`qSFyWy8RgEe&&ZiBb^$aw?eJS>d0^x9DEmul
zuk4wA%s;0Z<J{HldvVc8j=f4c{%h(wuZ6iK+;z^Ht2RA6b;W(*O@hUs)rwb^hOBwj
z5Ozav&9^@)4=?a*mwpz_S$&=>$nCG%!oXbRJzLfnH68!L+h}^?d%UaH?G?gN(H%Me
z7{XROZ&(`Yz?jXx(&&gm<AwGqOMW$oUAGE)^vb4Ty2n(-xX<smzT9>7fY2JQEgRll
zE)DI;o4cXPn>#?SfI+)K^i?3Y_w2RtN~&|@6j`@VZLw;dVpQnR@U&X*+u^29TDR};
zRjkZ9Y7xXxHzVwtY*buSL_}YGK7;m^=%9I_vYH$I$(MZ2D?X#By5O7umum#`4W`&*
zyBX#wJZ;>&aO!3kao^QtYZ+Gem2+!`nVx^FeX(}#GSL;f9!GzC2d$QPEwrzV^``uV
zsLF;dZ=Z8$wwbym@Ct-6wIq4iGyD)dpkMP>cFVe)%|`FGbFP^_M_qW!mSq#etghZL
zdj?8hi!U@4KQ-et$o($ZlXoa;8n19v^EuPmEo%ebS$nUzdg=APhO3Oy>OT3GcFkUN
zd&m0*8PH-2o*2_5J1$GDUFEy0!ap-H^Y-~U(wlZ{x%o>^M=mVyaADr(8Eh}MX`OYN
z8us*<--TVbpBIB>Rr?veFI>ucARV!8T9AyL^D3T?E&FGyZ3)TV=d|L_CAEZ=6B1<)
zOy9!7y&?3hrQC5AovTU>q6fIXZkWOsu=Hw>qR73&K?*EeA|q;EGskWU_i+4C^Jf*u
z>3!i|PV<YE`9Hk8>Ux#swR@C8#In<?u1hPqygw`^V)i&*>Ht@){Auo%&a6Z0g}jto
zuIdEIcuu=%bZOP&IN=1%Z>F6h*-{VhuRRnbG$pH0X2X`X8LbU}4qVqhJSj&0;H(>I
z9cR8XguRIJ{Qc!xasPRXgxrg~!3_5MU03*A&y@)abvm2)yYg<n75Dnc%{*7xPRneV
z_G9~EmPb67x*oFKJ?_U8_H19;&f|W&60a2BXW!tou-HRXmTyjUc|lLKx!VLAC$1Uy
z7yf>xyZO7!>6)D01#6x?2z~lKUa;yfOQ?MOXSutV3ePPs%agWR%e8^`w%4|+&puC@
z{k`e(Lg}K}+V3`2F=&feS#OwfA+j`Kh1tfwW1MU1ouYjAIDgMQzjK!UgeskVE?#_V
zEx6C`kLwk?!nDTtoAbW*RcrS>JpWWJ>{KYD_uM_l6RcU;WKWdzgqFvZ{fsovIGCmG
z2r_r^tf~2SezkKJcum~ld_ADyc8PH1jL8<tC(0}$_m(c)(j6F;`+Li_wx4n46CR}`
zZ}?<2)!RzHuF)~<ibA5*(Z@2%0b4t(1$w8(ZIz6Dx;{K{_F40vmHfqG8M+OkTwC3C
zdoX?y-@vvZcth4oXO>7#vFE?$=q-9xxK`=tx{!c^&I3V>hdlR%$u}B!e-98<)8mfl
zy4rhqm(*E-h|A|TNfkI~TfYumdrPZiqp0+qhR{<#7@}v2PWTR5Sf9P+d4p-+6yvS_
z6`AuN`8xSji<rNZ`*+6Bf3?#As|QQ|A9()iIpe<e2GxXh@t4wNA64IH{4nFeUiRCw
zEm^XKCgn3cx*Hzp+ZCHDaOc#w|E=evTSdb`tL1f>t{JU=?^t)YJ$J2SSy=lwT|dj$
z$tP^fg~Zm}f7VjlKE+_w*;|KO9wj%enJX$|6v6bCBS-&PZN&C>x6i$jvN)W5eeP*<
z&f8o|Q*IjGIQH4Ksq(+j+LH`nE7Z68dwWdI<jlO?A2s>xMXi}nQ$i+G^&Pl$ZT@*n
z$9jej<q>^1yuX(VpF3LPwBzh{!LX|H?R)|K9P2#AH%nPO|D*R|wb{JypEsZT^!cw>
z_UrJd_-@cT&qrd{>~!j1rAHk2W4K0fP19B94K9}@Z){VH43^xlXOYk=AQQ^IhH1X>
zCAWx`cg_hj{6BO4vqYwL@WGumk>|cT@2&fk6hAGsN`B|rzcuS;Z}|25zHmpXUHNOF
zyZ1rPetMZJ#Pi_<;SHxem+AbB+|?ZQR9dyb>yOpZ<G(nJo~EqybUkV-zCqMEx9i%e
zDD9+BbBld0t6F}sWFAadH1qX$O$XD;x@pbRvuanir^v6ppuV9jS5iKF=L;`T8r;9-
z{Cc<Vsk7tb3l`mX;EK>b7~=fdIg>w?eT`J(S5fs0`^KejzDqiJPu?MVKx$#?58a^T
z9(9>jZB=;zvdsGYdON#Hmn76NihaJk?CbT6H)<jWxLVICuC0^3cq^(btnpE37wgKy
zTaAwVzLTQ+q4Wwza#!ACJDt)6EYWj!Kh)XNy=KMBy;Jx8KVOpmzDOjBceUF3>6Yb%
zO^??V3#T4j^;Y`AvXsjVVK1zr;~GN6Lb(n{GuR*WQj%x<VLZS1L6XaDkH){Oe&-4!
z{{FOX>6*8_^jva?`$EsC(Ef>G%v&QSY~>C)d*JCB-Nur(cbSaa{(nB<xa;Z3rJ$9q
zQ{wmCZxR)*VU9keZ(*J>bMYgEjZYh{vU@wpF0B4(nfUb`)A5(O2lQn(ESvN7dRc@l
z^V*)UC6}zOy%5V&dRh<)+Q5;$Ftj~)(LIOcq*TUU&gqgmQx|%yNX>Xt!prnpO}^gw
z`=>RbGGFSLw=A<;-dftvAiXmu!n84rahv-_p9%NWH-rfPUvc%l`~j|3ySCO<vKc&!
z3gz!9tX-kra(M^y<gm|L8)m(aO0`~lbm8B|P1p7*ZAkkwXKzl#+y`>gCWi6vZ#ufg
zZb50UBWNux=QLlzX$F>D+DsOl+*bD;xNPpbBu5?GP%XRP^jLK1a>i+91>6x)f;#c4
zYx)|)<j)^A=L_?{{c#^??X&l_uJu_9WEKVGec5UFs6o{ubN4xkda)yIKdZWWS8h63
z>9slIb+4Imw$CRCZrR7d(p$PVoO618F86M!SU7{W$gd+Ur#9)lF3!6%LHh8VkY9Bc
z->v_fpK1!<b-1BA=fuJFeOm&nBr~@LE}eHi=)(E~k7p?}EKAT7ZuQ%+u5YL2iA{4<
zH>f3k+<TWHOydh@gk^c^kw{nJb4O<vg<Vp~Is9Qp^W;rCxh=O}<c|-kn0}y&`Sj&g
za}Ua%so1mGx8dr_Pj_3=CKg>(n<!=!qOd`A3U5Mdm22JlyCKt3Z{4wZ*S2Pr;0><p
z9lxzw`Y%fvnM@N{w`1b}olR4YeGtp+{LdQn>u{vj1g!%5vybIVFTAmM-IcfS{`MQ^
zljk)~-ExnETU+E;#UkySpUoQV8Gf9L3{B3^NqGKx&i92IpH)guJ6h{u?(f{W;NNPw
z@Sl>RAA_Hs`^@y3O}&0&_douuONGtP6NGhh&Iumi`r5T+xvz9dJ^zDx%kX@W<K=B9
z|Hmv&-N3$j-%iKw#Hs7%t+HIR>;Brq-}v9fJSbjaJG1HfQok+hio&MVh1huKJrweL
zcTM;JS8Vn6fCry8&UcRZ+QMvJQygkvHsMjAwePXK$@4{H?j1iWtQI=GwqyR{3$Fi}
z=L;Eih?PI(OK7d)jhM-N&4Dk%`dshrGrhd&vbk2``Ru*ANBI(Y4QKI|e%W~<J>cr)
zhk7hwitKBGA|e)EFucckcV{hAM(5;sLxr7r(w64=YfnDDeXdHVLvM9(kC6LctyJ^7
zCZ{%pUYlm5)*$*y^lC!xPBDf*@loEY>}zU{XV}-6&#--NC-?A^^x|Kl=htvIPPP9B
z*{;HLhUwuKkzVN;<+43B!eRHb&)3&a`?Ipl_t(0H(8*qWN6QYFHHf}4oxZ_~dzDl8
zdG%VY2XSvdoL4M}Yb`CeJ7kvEHf`(eB6F(-(O03_-jna%f4cgv!OzM$O|KKD%M{Cn
zMOEfPcN^)hU94ySjoJKRc5KO?%7m?7)B-!Qtwmm0B*-4PmHxI=a>JJL0M9MDYdb{`
zaJ5?b->To<w<REe)vimpw5RC!Qi(@WL3XztwRP7Na5^tMw|T=9_id+6#=mV!p4P_^
z$(X%=YQBhAn8uaJpyZzK9;#W_9#;J=oi+97<CV%s*M6&blkE}e9vY{vvnF6gyY3p@
zC28v)vs_CQm)ZO+E6+MXlMS@Tu}UIBi^;-mdqKDGe(3g>snS_C&q|xJrryurerqmo
zLaWnU_BG5)ew^P_%-hbn;iKQo?dNQ5pKLtGT+z0ry;y#tg%npTcfwn1jy>+H;;h)T
z=f?=?tUGn-)X_^NYtA$LdDL+Alg?jI=vQ8{J0{EYI(-Qj2kVkoD}S=B4`*C$wZ>=5
zt~7gRE$+QdW~nbg?WuE9vyS}lWsr8#`oG5L{8OFNdRI>sO`DpOJG<qocT~9k#7E(|
zH!}r5ffmm0!K=HCW6f=beXd>Uq8z$0)2e3_GqbJ{WnYv2XVux;pz2b}ld(c!silo;
z*6*(qKJ0S-9`M*GVX19jHN(8itE#-h3l_(%mrsqnW>y5+fO&4Jnb7qKmssl-t=@WS
zy|Bkr+usZ#w-Yl>JwvW;TNt|J#;tm$AC1!<_*o}{<1OBuFKGV(rd!DjcFwQZRKzz<
zkeD31qdk$&Mk^`8`PAB=^w;wl|41JAzCo@xHx#ttQLf;v(ps*44qOM`U((&f`#|lW
zsn_b)F&o#awf=b3GQ}+UeDR(oN53<Mty%x};(t)c$*vL#5M|01Un%lsI>SCilV=Hc
zoBWDi`zc3;+`9ck>VUS>EBC1CSLZ7_yjS%|f%dLCuZoOU+_P<Bkld67E06O{klL{7
zXWKDPU)?OefUMwUdmE!x)*Smd<v>;2v0dM%F9KOI_u8~qK6}+nro9lm=aeOE-zV~1
zYT0iKkJqc;JlmTT%=D0PjprIJj&+J_1NJ?wIDdTI5=VECcl;7ESqmFC{Ng;IlW6K)
zaCgyG(}RiyycVauq^Fm2t_<x{WnU@!{GY6a_WMhq5ZmQncl8|m<L?uV&a=)<U9xAb
zVV~lXXUmv(UJuB33+0McUm|8{Huq`iQZCR|Qs#}dhulh6PMhO;_5GcLd%P=HyuAaA
zZ_4gFwr%sObuo-<0#=l(Ox&{9je&u=8gwqejhqFB2i7T6|I5CY^!a`@H_wX+VaZ@+
zcaP2sz5?0<&$uQ)L*!SBYQ>~YpBYxmJvSBM+R7RB^Ty4Ux@&3*^b$n5T5s{LeVj0L
zF3Xxfs~Y}2SQ7FtKtp6#$DWBH1wAX}4==gju=JDYt=zeaYvuS3T)lO2Z-#~l*W7Sd
zBe&?*De`Ll{*pg#UB4j`u~oQXY3~$}eI<dSC#D!leK)V_U;paHm)Tw(C(}$L%w7u~
z3~|fSH0ce=e=d-@{-T-EK2fgLbMLwMl;2kFVNRIT7Ra`G_15kw46A)_@*cRQxTNfk
za5u{}iTE$x`yNQ!>4VNFIF}vk%Ur?oAbSb#EoYNi-%c*zElQIQyZlc%A@lgR#$wjv
z8L_plzupQ(ZMAs6FyO@;v1?P9ujMZJ+jon5=fj551IMKrN?l&9Rhnuyw>Y_h#b&`(
zQwOQ4U#8KCJgrXG!++*9_q>sC;WDmmzq0O)V9?Lmb(>NISAO|q6Lhts-|NPd1XZoD
z3AeuWeA-yJZ->t|!zHt<%sI@bE<6z~3u<9A>g=qK5}dO{+k*E&@u63Il9&De?Qvd}
z_Dj2dojm)RRm@@b3rnY8n5DKvjdP9Vl2y&`C!Pw=c)79dad~sQ)56!RtF3gz;@noX
zRk4Rfd{C==blQ5qtCq_Trm(ADloMVaHJ`9bT+Cyy;u6s#nuk`+|8OcJ_v}HdOKq*9
zT&;bZH*}fQh5Rg;BVg_DYS(6->=Rc0&Kb`wxVc%*v0V~+WS3}q;JCbC0&~lCgO?GG
zTu0)oVxI?SToL_r^G$7@#`~=KpdD6cBkGklgq@t8+{hX+^9mQI#e<AUHOZ&_TJGAb
zY+IZbUiMfQ-+S${;u_00-}%DiCu|a&wJMTvKbP+&roX57OGMK-HWlt_|GOl0N8`eP
z7b@2`@OcN`XxF__>(CW$>+Ur@%1v+c-kB$_y)itPG3VX<TkLn8PR*8B+G;BFe{y#A
zD|ZQnlBkTU6Cd53?XhsVxd-F7a+5y058v(1r07403ZLFr$viROcBz@?QPH3RiEHn5
zbk^M4dtp=YA3c#%hq*SiiAA$qUBo;!p>&n?Q_o9kFB}hfPMgX<k9C97!VAk|obIm)
zt)4XXY+Zx!FPSRt*Cq>2ekgo9tKrJmvfqbPd18+|vI=&e=fAT>eP-#x0F9E=t}QJA
m8lYx3Xb@LJWY@M|{}ZoH4mz}aX#oQR1B0ilpUXO@geCyK&DZGw

literal 0
HcmV?d00001

diff --git a/src/webui/service/static/topology_icons/optical-splitter.png b/src/webui/service/static/topology_icons/optical-splitter.png
new file mode 100644
index 0000000000000000000000000000000000000000..90a3d79b8ed4b8ae15f3d4a349cd08d741dcfdaf
GIT binary patch
literal 9244
zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mJh`hRWK$QU(SE22U5qkczmsbIWVOT)!Qg
z&*{k#q#JP|G*E<l-L3`PZ<Kbd6V1{1w(HHKTi3THIJ&S{bM0EE@vnq&q7sLPsfNN{
z6-L&k5W#?|iBcXr_n)sk+5P_aq$j%D&)%{5-0$>mZuPnEK62;gS{J)D_Of_1u<$4@
z;Mq7iZ4v|L1O|-=85R`>regvN5+sGSq`a6^91cE`P+$}?Xk%bKJtN>^fRF+sm)LOz
z&It{MEE*BVTDsaMF>nTKuwe6OVChkGIB296VlsurqoL`jp#zgj0uLkCG{c397OFTf
ziRkn(3Mnuqa|CSY;S}XnWfWSFP{=cZfm6b{p()j8MTQ3F1P0db<OUXx0}@OkI>}D1
z&Yle{8WA$gqfSB&r4T!&X{lEk3ML1=O8z*nDfH(t23s{oWsZnxs=rM54md5nA}pe#
ze8^4Nb3u{N2A$Ww4E@Y61SJk`(s>=iP#$(}!li5>4xPqghAp~Z^Vk|V8H#%ARJZ7?
zHf=c1aD^-9#tR9~2@L`fybC%vHl;>}nKPU>oTlQy)Tkc7v0!6RR%2mPYUH$(U}uIH
zxgQ1>9fcGa6%9f(ub$iCS$=xclf7js4ZkK9>S*Y=tv|`Vas7%J4^<h345l1N7N6fd
zD^fBwGXLI^-KmjAjNdgIvL?#?-BK#P?%iL}PuFveO?*sdvv@o>dad{49nt60*$>Ga
z+@!ObtKmB1AM0zg-yF>@ysa+0vG#qP+Z+~;0|89A=U4YDzSUoOqRN=%^rkh+j6CcY
zlrBl1W{NvGuU-7u6Q_Ukds#dV_%QYQuj$t8-|Bd^<fQkh++W<&QX_jAdl(9wmPqgZ
zF5bFnl_B?2ZFOnR2@NY*{OmTVrP&th_N|&&dV$r`;n$gn9=>`j<4bGJrv~|-iqH5t
z^};5dNRD5E4QD)7PtW-wn)^G&`QK?bCY1!e#;C}dGyY!LYOyx&t%kbXzZ$l0qGFE^
z-(D2A>dTo8I;VvifAKfeA8B(k(mJ_D<#3WRqmaRLhp8s5oc!^v-BL2*Pmj18PkS(*
zdHJLKvr@10Bc`QxeqEf>7_mfLbz1AX<j)s!|JW2OyPWoHVBr(`@#0%|f&b;pi#wjI
zz1hPZKV4Gc1xSnMKXV?3yB_*wB5#iC%KNv}@TPz)nty;<d~R#`Ez|y@l+){&u2knS
zbb0gDI9|3oyh-PEJi|SP334x6*R0<4?=WY?#>)1efs5Ex9GHH*mOP&PhB;ip_pe#0
zUiV)AcQyjE%fw_<mMl$(oTkd{V9!`koTJlTzn!c6>)f8bt#j5tvQTeS5U}`s!)nIY
zC#5Uq{fv%Nx@=otRjl%C-94G7i^`f(Bd>Wf9AmJsz7*uiIbYgTJiqR5tw55Cyhj5|
z!-Y+)bNa47Zn3($xZ=+3|IuIOZ+;`-7R5O&HF8sCr9gw##A$gq_wsMA`NONG`?u9m
zjZuh$gE3M-i`zN1F(aiq`w^3kX-(P8xGd#}X{omS3%DD$czEysU&+1h<=oz_x69d8
zd`g;GJRCSqOq0G@C46(4UVMLdb+4ZIg!fIMQ9@}94Q3m|_)bQ1dh$kQHZsp)X>wg~
zS@ij0@7F6ry&}H9mix1A@|8O}`+sUhOiMM@nY(^c&@uMtKu^wjGIrAM{o+K{Xk3&Q
zQfLea6WzVA^87!gIX7Nz-f@(xMtIGoNd|uzT+VLGy%pL}CSTi|seR3Oi;4piqjJEt
zwzQuMzO{$%Kd^}9ltZOn#I)3tGFP=3=5_V9uF2TDt=#O|+Z)0g3@*wFDKP#N(uikK
zHaFoG^$bYa8KiVJ_@I_9r?P6#f1&I<%ZsNiJe(f9asLh#!QGX-oD&)xSyFnZuGu=t
zG<@RQqZ=zLGGpQn&8tw0n3g)1+hN)N#a@Rx9BhC6<oPo5pYtKN&rU)LjKv%$UX?~3
z)mwd2`Syy|)rEiAZ+coj>P(nAt>q>2f~+N_pI)i2Z}_Bj!i`Bqz=tXS?gf$lEm<N@
z?|kyz|EOo(eD${*R)dO)HCyZ15B%LY?QGmu!RxgXcxR@hD>Djls4=eGqaZ4wbo*SB
zlg#%w%O@}=P0C%z8J6ieL!ZH<*Ywr?;7=dlCvH|aEq=qJfu+gQAuGx=S9@ilXrAj)
zRg2ZPpGWMhO!xBJtrRgWwbP?kGFr$@tl^${fmBM<++G$Bg&izQqE>|PPJOlTp_*!6
z^#5|1P4z!4Q;*Av>zv*s$Miw0VTJRNl<eM|jT6_J<)}C?9aJs&kr-;Y{c)+q&yHDv
zes&*^>U^2A<-)YbeW0XgwD8{cHIocBaeQgB6IPf#<0i;e-U^Goq||J0vH8B1mwoyq
z-BP<C{J!Tl*>aZ+UfzdJtUSG`L~+&0bFb6g&RIqnUf6c@O#_RELp0Oh_j#?+vrRfS
z<sa0KF8rr$G&gtuO);I*n^FW<Ofl$-5>#XTw&X(GBJGH`yAR2EG_d?p`S2z6`NG>*
zeHZ!M*p)8-%J#EnmzTH9?XBmhB}7j9%F~dyQ8lr`WzXFWAL@h*x*cA-sVBL#pB4yw
zDDk_y>*9l>ia(AXycD1b^2(;fNUpcCK|*crM`oK|$k64yp;~b6qkF=!$JZA`9m`kk
z(>?8UdfsBg<fm-A@4DZezXcTO6Mt%H@)mD6seU?q^Yg`@XUND2zR&2mA<6l|`@xN<
zs}nA7)P1slqVG4>dYj_T$8GAW5z|sV-Bf3WhImTI3BIq0xuM9J;qL$``MPrCeWH8V
z+5O9p{%c`by+!4WH$%!ftydh?mRYZ7-HZR&Q4xOVu%D-cKa)|oYH^rRx#-Q5(|6}r
zotRZv9u;$NlaBYke<#BaIC~vBA^5TU+gu*YD^q$|JQjQssCc`J`{NJQ{ryD|UNZB)
z{BbxT7@N11i}my-otr!UY>4Jh-w%px1%=ZyUfEhRY}$D9teF1>mC~+TNspHqzM0M9
zalnRYQsCc@Uj=7uzxFq`{OxS>BkbF^b+lY@*8JM?r*+el+bYtW6Bsx{93Fi8?|bOM
z9npCPUDFfSvJ`xHuwifOQJbRElQ(=&R9T?kXmz!2^#O&jYj1DJ-~Lvy+210r?Q6-)
zMnT1@P3j+b<wV!N_gIvw@_?~%@7{lHJzMUdv$ornTz^7LMn7r~Pj}N(SCJn)LIxcS
ztfv<wTnrIf@rFesVrnhRg?gF@G6WcFGn*P22Q1EFTNUnm{NE#?C+lx7la=P0R;IYn
zQ6<2xQ7cocgr&N7)yt)iiX2j$>d)CIn6dwx)A(xU{=fA<etp<_)qDL!d--V-<w_s*
z*!;cs@BX6yb5d`$HZ?7c^~eZFRaQ_Jy<buHx7n#!;j(4OgeMYZ`ceOW<^HHG*Zi_N
zesRJ}ap9<tlN=suQ~uXj%fzd{su8`f5%WLM%uP4q?d{LnRR*lyr#D<!amww%qsy-o
z4;>Ew`L68TE8mP?ZF80^PhXtyQc^rBl#}zz-qoUc`xi8>pSQiHT4b4Z4a3UGe1RM0
zEIGN);{aP@RHWpOg`a&bcBOqexWH_e&#P-2yRWtMoxQv>a6?HSU+(G>mUTA2%O$>^
zKVAFr_nztPi3{7jC6y8bHq=N;)o5@|@lPoD?OkxVlD*&f1IyL);^~jq)lIgooHn;T
zV8fdWkN2uPU~1fDy2)vM+ty^hn1Y9a3-!9ay)Jw>su;1gbb54u!J2rkX~`Nl1vxF;
zA8g~6T5vyh?VQ&en&#d6T_z|eYjt^Y`psGn*3){9_xzdk1W(kx@cOg#;YYo%bqj9a
z{moTa^xSct?9|ljl3deboA%6SiBSqz|1EJL>(WiN$JSn}{bRGoK<)b4ce3xNH$Alo
zD)V4EC#doGgWqwh`@424Oo@GaGyX}${Je6PgGI9qeycM|v-DZ4(VAAaQ*xua-0c^i
z9<24}o8P-#U9Vt~_W5565-Qtf@hdex;n<Q{qV(&|HKx+o2#;N5xARP17;(6&h84N}
ztTAOh{hZ;$M->5YhfS->^RxP9OV58LHRl`ivIXzgEM52Yeb{jko$V(!#S3{fHq4F;
zy)j2sdfVc_?+Z7a@mlBfEO<kZM97|2mN{w)kyowFO^@s9rG+NW&VOOdsJ#FG$xLyZ
zm;FsoIn(S~SWc-wa19f!+x6~g@}pj1t}q*?KbD+3Tn?OGqxGf<B)D){!cpZT^CvfO
zv+Oyu>d>?P^YPtg@B7OSO26N=B%$*7EPo|Ni>aZ!=VBXonXY=M&-+@{=j)y6?THhg
zJxzXO>3p!uy~AFev7N(WV(8kN+q6p-oqdw}y5QYMcZKgSw{b?AYoxQjdtt4)FuQbL
zN7K^cl8k5t4v(;_t7DDt+*0}a>A0(^>I=(4#a%sTT^$oYI_fF^ue6Ms|93Z+<;)N}
zwYUSC5g$1|K37R-ZV-+Py*KOZj@|cDbmI2^74Q~1x#`~gS^e$pXEr=+wc8%F;Y%m0
zE~fzF&EM*)uf9zQ-T&@xzu)4b3)N9|t=%^6cgiJQBu;0swz^t8ZFRh{W3z%liDpD2
zhw|JDod=$#&ui#^pV66|wX|-=kqedDAJ;E5-dK11-i~#lQ&RW-xmr^qH&=K&f3V(y
zgqcE`w^rIRo?LY=^SVrsuE|v~%a!wd<PTfNw5>khd2W-6^XmJR3S}Z9YL};8yB@S*
z3m<>4acjffHLLb`es%e)uYKBRV~vkZJ=A9bjEw4=R&}Xeo!lrtGj(Q^o!Y$pB5NvI
zeiRF7v^U&c;}v&vp0ugByifESkEbmsbY9EP_dTj^Je@_aOk~Z0)+u~DeGhc5dG&eE
z)QTscC2wpweRF+ze8~<G-u`vDIX`DqY+MY9VF#ARYrTG;^7+6<%{s<EnXmP13@W7d
zor-_Wb-mc%Lg;J%nohy{Ym1iF@3&r>@Kcu2?mh?8q|mQf*JZXZ|G^rdc6DjpukPf}
zi^5h(KiuQy7PP^Hi_Q1q<c7ODwU(=0{kr7w+E5Xl{L0UnY=RqRhg#aM%oDJ>?z1#u
zXWKN{***vI!k%7Rvg@SJ+zoS^p0c=p6O>>o+q^0yd=)#}g42Bg8)DebygRFypuYOi
zl3nJ7%MvON&-A}Iqah{KHb1A$TF*vTRr~pxTO5|p*RT1cuUUFx_9<0|gO47pxWe)#
zCDdr;zc<s1KRzr;4_g)f%0cCY4Xd_ez#g3lmN#jk&Y!{_1&W8QV(;Gc`Ch<=Iq9e5
zOw}P4?LW9Q;pgf2*~^zNUz+&k@AStnCl(vjzZJ`UQ*=qdI&!Mds{LQjGL^`tpY!_q
zrhVO^&x?x<s;|1K8~(Z_&U!lh&o7%jUb7DEi+k(LcGAvdrP79!!|Q)ZWLy@qj-0x3
z@~hqV_lbvIUY&4fk!i)V(>o)6oDQ2U@^}B-rl<8hTQ(>JZ8)+(==7oV;^~V&zld3L
zZ<{x_^jnFK2VB!zS2e0#-sb&NyjlI~;U-nPXfcJ<>8g*T_GP*oNo?6Qt!Zhf#UEp}
zunmW%iHJ>q@OY;8h1@$fYi@5mZqF=RQS>{F_u}ts_RgB3+qWzDta9fHyYcXm5cl6S
zeb?z5D}Pk}ez!xWWOqZ;(rA~OP0MW#a?ReneFMk;xs&>@Z`yzOn(gnJO_%;9zu&Qd
z(QfDF)SZh&mw0~N#G>s}5Fco0H|HDku6k4c*|O_SrrLWw{qAtEX!1J8+T+4&HfURO
zeQW3YQj`6N>CLV5XAjxT|2`Dq+4205#zmvTAlrK%R(WhV^!?qv_?B`t-6PWR_57V{
z-}N>vt!}Z|q#t;YYqs)#t^IZnt@oI#%70qFHPhE+_5ZtT15|Z+m-($ao;<H3q4oET
zZRzq=HJcgss_C|*T;65IHErF*j|bN+D*r$4OK|<qQvO}N^V|8C>-znQ+n=9N9ak$8
zs(jkxws7KfFB|iBce>v_e*So`X17pf%k%328*JRyJ!hVLc0<zMh>ex*D`q`AFz0EX
z%!&o-s+-q%sU7b6>f>d(-$al9?{l4IpDV8~X+-RDIh1bwhAZsGAJ^C0TJ7f6|NQH3
zSAFF8ZNW7LwvpZ656y_-nY}-#yS_ssLgu<6lOJc8#PT!TrBZX7JH6`^6X$bSC`Ke+
zPW|q@JkU~N{{Ca?`Fu9hnx1Oc)ylowlF({9ds~vNoV*$L&TO;Sk8@Nv9`QWLr9AuV
zV>g?BM}5x3Z9OU8C886*;q~``?JU}FUanxZf4Eb>c*6d=*>&gGuPB+bX!m&aX}-27
z>U(~>RwIIw@7lEGveO?-O^Z`&Qk|W8H?O%kyk*<(6DoW8bWarieKzshI^}Ow_cd9y
z8z)>_H?325{r#y2rtVP@WZLBMdGbu}i={d9*59t>JMDA4Pwu-)lF|B=4GlG}e@fmN
z?Xgfh|Fw3x$QqV5C01=l56zgMfQX*&%bz`-y8hYkO?TUyraE2F+L2mc$ob1BUMA|e
z>g%0%GDOy}tO(j5)R6Lc(p=Wo7nYfh8B4cL2f5X(DeU0d>Tlu?@8*j??B%@gs1;{%
zQzL@&!jwb#vwwQcV9>0dzUJ;eY4JT~GP7-N^>`oLB)-0)+*@Y$9<w_aR|$x$skp*u
zaM+7sQm^-tu*(fQPk*@5VYzOv*OXK_*3)hm9^KK}x_#b{B(o>-it5s=+KjVA*03ln
zt>|3S^Z$5*=8VsizrU{1h|pwP+jP6`#s*ngHlL$C^5z!zEyerPj!kKrDzQ9e-K|a4
z@>c!l9Ou8ZZ&@|_*F}wpbAi*9&!_0G%$ZeI{9e&`4NH>SK`(}&rs*9Po)0ZnO6oV?
zIq!CGlYjibwLkB#QC&FeW1I-nk_1%&W3Di!2|_zu{PHJW-~Z?9ZQ&ia{(5Ufe3PjE
z{&`w}&F5<s<)?&LwHs%oriL60o<48(fvL~pCM^@OiY?ry&3EGZqCVxc#rNN&uKSX|
z{PMZ*zX#8~jk<sPr&oE+<m*4v-Oh1d{q=oU;D$YF>t24obHiJMJ;H<4d*y1Cr4={#
zs6O}-=X7)7hksL!zOYea-&A(4-|gV1=3Q;)OQJTY>HU=C=b4xHWnz$2o2KUEIU;Lb
zYF}^P_fPlci}#UJMb<27b12X+^V(2%XOr=ke`!y?uWsT#EpUF0fKH_Q*C!ut{;<hk
zDi#;KVGBpIoZFHhW}8c&^pcC5zuxuDRF{imzG}3Z<yFgTk8fp<f8J_&f1&n|&51DS
zSSeQT=^j6F+UN3Q|0rMm;l_oTee1Kzggbv&KmM3~amBrd3s(siotYZ{`rw^U##ec=
z&m6j1k#oam&7D1$buS0Ko8C0lXjj7B8C?mww|{8AleQ2Ip0?hc@7Qf~lf#GCp0mp+
zfA{L_j?M2?biP*h9rK)UlIz;3v(^Ro4`j~R5^{gjH4z<k_l|?Ls>%^X51x5He)jP0
z$!>-CKA-Hh(sMf|evd8dxLLGs(VA;@#tJvX7B#8H7sSii>z7!ptGRg<+#K#}-=?Y*
zv1wH#*VfW66_YnjmhiJ(B~~<lpPcEcv?;f912(O7Ve!^FaLRpBsr5ID&YN5JX+*4B
zXuA4wMbp#ctJ0QprY&2pxc%{0i_bR>KQ5DP$yu#*aFXxy@BDL~-BNqHqak=tL(^2H
z9SiP;%}Y4B>Y3l-XO9+3+GiB%&6Ryuo0r{KJ=@f075C)LYd5iY_bqvEq^2M8^6HU(
z9#Dkk7wGqi>f9{+|M1Jvg_~dexwqsE%h%hp=5*DS$Il50pOkx2zp_97%&$ojnh{EV
zo2EXyIkC7_(|xYc52L(A36`!#41Zg$zx9dVD96t?^WjfHzdWTWw#{YVubq6j;d|Y$
zwT7>^9r`%M_c=fB%*IMa3+YKsPoL#?I@Wr(eNDa|?JWF?xp<m%O68+vaTP(aUv}>n
zmAbNa?hjwX@L5xG*S@Lpez7`z|4r}S`nmk=jZITOUEsafd)4?d^M21rt^AUms|@G;
zc>O+?^+HR|>a?)7{Ml1-53YTX#x*TE<>vZpEOSn5dop8_UUKorYv$ZNa}Hdya(F7?
ze$dD;Ys*bRrb)S_xtCe~@7f`_L@r|0*(ds)D}TMYUMr%r|HS8=w*(TlE%nuSB;|Cl
ztGh!ygpJ8BHTsk5yLI~}Z%q2!cdFrRvAkx)Jmu%irD_jCwtYP`BW927#Nueb<FlHc
zngo7Jw_!ZFEiUUaOaHAox0AL#{S&Yt!SehRTecR4&ANY?JP%&dSKH#D%yed(2^X7x
z-8F5AEpG83JBn_Vp7-S5nWud;!1%D2piKVi8Wxq?RU1o_ZR$GrhJM;ycc-KJmw(w)
zmxak$VTV7Ku2R-#_|0}&Dp6$3sqfY9{kcLHEN{QMxJ~oix^jzkKh9gsj(b&U&FX!A
z#|5pkoF3b*zI~-uv1IDr&`*AKo>ShuI=*hZg7IFisC~9vm&5Ze%t`w6EO5i5^kdc@
z4-^>HH?7^<>iWXQ%DlvD+uTJ}6WOz$thv{+EWd{*X34j2f2568Es_25dd2cziNEjt
zo%cgCm~nk<dE%4JRT@j@P1qkWE!CFy!PF1_^Cd0SOGJdFIbXOrY+Cy+JYK-6_4v7Y
zF4i~0Qp!Z16@UI;+no5h{tEAO-RdOP)p^JNP0(7Ew|#Q|n$Dl+xAfX_KM-AdWwVIR
z_LrOM!#RG;%>BA&qoiEc&)XYQA1#=3=<bK3irY4sg*)7QaYg^&tWP(tX4IWBoH#9?
zy`U{f>&v~fJg40PDp%KoLh|P<Zl^~NL$`&7m5Hidc({4x!b>L{GwaSI+LpfDxp2m@
zEvu&nEk0cDevs=F$Lb|@ChO~cR_t22$7{*0l)TqJ19w)W7ac8*-kX=x#-6-s^#^0~
zH#fS2<0M#CPLXPPwl%@j>RrK;l09-S1wW@T{98U{m-!@hR&9>Ot0(;q&{dYbyFRn2
zJ=(0Pw<vl=M&9a0Z?t;iPsN>Plyc07<C^C4?)09}!^y8)7DWgD(vm2hpbXO5ZP&uF
zV`lE&>fqu#_aCj{@;trL{i`+qk-jFU$I6eEChWbrEpx?=WS7khCc$23`&c~>8r5Z7
zZ1iB7l-v4z+niI|gifwIWVUCPt$j(#?3ZV?5AIrVaO00>6R!naJXjT~`PC<qM>Aqs
zzs{|AHO8NpL}uN#I&|;Ow2t#H-LD_3t+z8)ycAUb?}|8E;^A|9Ib+wqc8%khCUbA%
z{gtwPt7{`v+E^LRg?ml4l=L`wsr1MNz1u8vPHmfHy5#$nqZJt^zNF+|epRK<vikpB
z@yFNHmb?AZ)eb%%=%uU6&&KM#I?*Zlj>3Z@cfyRyM5j+_xt6;2)-LUtx3}!NmV0p5
z!#%$w?);k+G5`P4DX&5WIk={U9d0?c!_{Ha+VFLI8TjK$wyo9g?7U@eQO=t8|Nase
z{p;_n%voRGh`Q>uzG>^KRJUJ$*9NT$wE?vOT7G<X5d2_t+v@$(#E2bvvnT$!Bcd}i
zCBO1k;l!9HDihnhR(}1M5V+xy;G^@*?gv)qWY_$Q+EQ7+XX2kbLOPKZ+S~=nQPxYZ
zTySv++#s~@NH&w_f$p5sS3Vi%aZIbpJzM>&DkXJ^d*5<Kua(w9vI!z<Ts%MSauAx3
z^ZM#*y#vg;cV^x;+WM#Ga#N_PZ|k;ubAsP@oG9F~?n`Jv`l9CUrl}g5apD<F^>$w)
zdUm`wy3#q1qwL7@ZMA9-PQR}&TB5(+sxWH9u5Fo3>H7Bimue!<-t*ElRh68t5pnXu
zqpgjq3hUeN+g(#DJGxc*pWe+4vc0?bTUGZjYBN!1ef>wc@5meV_0CbVy1x8N2;7%4
zAz;I#g-5fQJr`tEi9WHfSN7YqQOizl24uLQ=(_W<-FH9Fw^og4PhHk-W;VYlWUYt%
z625*N0pF_2s;s9!FFe5h%5A}#MKyl6cfbcS(w0Q}afZE*{@=6T++JB|`I@x+HB+Ky
za3ynvX<e!CPvAJQ`oWa?__v+*{q=_0A^!JTp0y<W{o3=`@ZUl0<h!+AnqS>k@n}S>
zob<T%nDB>3p$0;iuH9v|*!fxE&CU2Fw${6wROR)>?C<lHW`}iuDV-MdYJzLT$pZ@#
zRGqu8vvoNrnXa2tw&V7X$`?jz*I(wzzCXV%q4!0B=B+u!K}%vc&H9_O^h%WVv7im0
zF{WceA3lL>cvsuHQ0H{FaK;;!<9!KtFMlbiDf#WXv46j}=GFUszD4@rVWfN+#-Bx7
zAMBKl`KuKnIOY4k*cSKpb5~|XuWBlFn)@o^%1gJ9^|J(D-q%=q#njKj=U`Ej(r<&V
z1NHg;gsoH}CY<Lz&eiSh6wgzCPcC%bonH5)cha?*R9&5y+m-Rox@K?nY3HU{e|45l
zk-46_J8(meatgbeU`FY!!XLjTUfVa@CgEMtoxAy)-j_{DchG9O`tefn#lIJlcSWh~
zp0!s=LqsRHorkx0R>K~ye;0PjzPh^ZUCDLN@8Lm75Bb;EEzJEnGlg~aoa9~iLcMG!
znattJTaaMsIk`5|_d&n9eD7@O`AxGzjRUl`g}1IsU66Lw=gO&54rkZ+c=Q&Ue-oO<
zp896d)g8;qw@o`UNpMY3-^)o?-#ph^Dr0+pUenU21q%b~geLgts3e8*cgzSmW}{HF
z)M@(EMyXHFv)KRD1TZ{(ue@&MyqSXAcdcCaG<}lb8oAurk1oDQ-j%X&ri{wNA6k)I
z)8_A&tSNiId1am0#Dk${9lox5Y4K>o8fK>%QyZVoE=xFb=<2OPkB|*dW~}S%-`2VH
zzva>^r}Hda4;D3R{Z?T-%&DRj@l@ursrR`pp<X*CB)T#%Fkc6)1=zVMb5c|4j{}Q-
zsytw8bYWTDlf0{Jx}1J~wyE`gp<RN3-#nQZ)dc)EoU&ZDdT-FHWb=&%hl?ib{Z?ai
z<_u8*8T#}_R#{p^8=urHU#2?26&@Q-SuD#IZn!)*>a5?vPuj0)^f)EF7T6rDTJiMe
zgr;`Gw?<2^u;|A;)m|t*<tLAjL61XZQ)x)=noWH#e>rG=^<RHyaYCi*tn-SD%^Yvu
z{xm<q^{rs__cshF_9d!PuJV_+ZrXAzv@v{L;D$X)XP<*+pORQ#|6TcW$Nr;{8|6H5
zzuD;DU6fGiIs3d4qcg`5t}w~8{R^hNdbQPBL}z{H=Sr0XhQ=F~Ya}MCuFiUNE$ds?
zhky+{5;i6iS@x&}G$x#^nJV(+_r>hlPbx)p>{ooAsj|Sbk&ESZ-O`Z!{b%f5HiYHf
z>)d*~{AVivd~YU|1&obiynW7B4t`?KIThv=`)+w<JIA#7$3EOtabUV7^h4CadFd54
zd)*}oKRxH4S7R*ZxU+DI)PwCiMRfKnA9y~wL6W5}$Se2b?GV8=!i;ksZC9+Z<DAeC
z#-cKN6?=km!|tg;k4rbK>!~!AJ+p{c#eu0#XoF6+Wy7zfSDn*;XL>)`tQoP(rKxN}
zgByz%Yj#J_tH|CnTCYzp^?P<vOh|#zo+DzKsf>g5(kXKq7W*c*E%nvN;NX1Wd|=a>
zU0#}+XO@R9PRJDHlX7NK2@nJ=zhEC-ele66sr-|ldBkMvv9BvOGB7YOc)I$ztaD0e
F0s!7I{5=2w

literal 0
HcmV?d00001

diff --git a/src/webui/service/templates/js/topology.js b/src/webui/service/templates/js/topology.js
index 50486d2a6..b852380d0 100644
--- a/src/webui/service/templates/js/topology.js
+++ b/src/webui/service/templates/js/topology.js
@@ -70,11 +70,21 @@ var simulation = d3.forceSimulation();
 // load the data
 d3.json("{{ url_for('main.topology') }}", function(data) {
     // set the data and properties of link lines and node circles
-    link = svg.append("g").attr("class", "links").style('stroke', '#aaa')
+    link = svg.append("g").attr("class", "links")//.style('stroke', '#aaa')
         .selectAll("line")
         .data(data.links)
         .enter()
-        .append("line");
+        .append("line")
+        .attr("opacity", 1)
+        .attr("stroke", function(l) {
+            return l.name.toLowerCase().includes('mgmt') ? '#AAAAAA' : '#555555';
+        })
+        .attr("stroke-width", function(l) {
+            return l.name.toLowerCase().includes('mgmt') ? 1 : 2;
+        })
+        .attr("stroke-dasharray", function(l) {
+            return l.name.toLowerCase().includes('mgmt') ? "5,5" : "0";
+        });
     node = svg.append("g").attr("class", "devices").attr('r', 20).style('fill', '#69b3a2')
         .selectAll("circle")
         .data(data.devices)
@@ -93,9 +103,9 @@ d3.json("{{ url_for('main.topology') }}", function(data) {
     link.append("title").text(function(l) { return l.name; });
 
     // link style
-    link
-        .attr("stroke-width", forceProperties.link.enabled ? 2 : 1)
-        .attr("opacity", forceProperties.link.enabled ? 1 : 0);
+    //link
+    //    .attr("stroke-width", forceProperties.link.enabled ? 2 : 1)
+    //    .attr("opacity", forceProperties.link.enabled ? 1 : 0);
     
     // set up the simulation and event to update locations after each tick
     simulation.nodes(data.devices);
-- 
GitLab


From d8b2b09a37f0fa921f8f949995e1ecaac44785fc Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 23 Feb 2023 16:30:25 +0000
Subject: [PATCH 139/229] Common - Method Wrappers - Tests:

- Updated deploy_specs
---
 .../method_wrappers/tests/deploy_specs.sh     | 82 ++++++++++++++++---
 1 file changed, 69 insertions(+), 13 deletions(-)

diff --git a/src/common/method_wrappers/tests/deploy_specs.sh b/src/common/method_wrappers/tests/deploy_specs.sh
index 571990eca..1f41d2348 100755
--- a/src/common/method_wrappers/tests/deploy_specs.sh
+++ b/src/common/method_wrappers/tests/deploy_specs.sh
@@ -1,10 +1,11 @@
+#!/bin/bash
 # Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at
 #
-#     http://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,
@@ -12,21 +13,19 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Set the URL of your local Docker registry where the images will be uploaded to.
-export TFS_REGISTRY_IMAGE="http://localhost:32000/tfs/"
+
+# ----- TeraFlowSDN ------------------------------------------------------------
+
+# Set the URL of the internal MicroK8s Docker registry where the images will be uploaded to.
+export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by spaces, you want to build images for, and deploy.
-# Supported components are:
-#   context device automation policy service compute monitoring webui
-#   interdomain slice pathcomp dlt
-#   dbscanserving opticalattackmitigator opticalattackdetector
-#   l3_attackmitigator l3_centralizedattackdetector l3_distributedattackdetector
-export TFS_COMPONENTS="context device pathcomp service slice webui load_generator" # automation monitoring compute dlt
+export TFS_COMPONENTS="context device pathcomp service slice webui load_generator"
 
 # Set the tag you want to use for your images.
 export TFS_IMAGE_TAG="dev"
 
-# Set the name of the Kubernetes namespace to deploy to.
+# Set the name of the Kubernetes namespace to deploy TFS to.
 export TFS_K8S_NAMESPACE="tfs"
 
 # Set additional manifest files to be applied after the deployment
@@ -35,6 +34,63 @@ export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml manifests/servicem
 # Set the new Grafana admin password
 export TFS_GRAFANA_PASSWORD="admin123+"
 
-# If not already set, disable skip-build flag.
-# If TFS_SKIP_BUILD is "YES", the containers are not rebuilt-retagged-repushed and existing ones are used.
-export TFS_SKIP_BUILD="NO" #${TFS_SKIP_BUILD:-"YES"}
+# Disable skip-build flag to rebuild the Docker images.
+export TFS_SKIP_BUILD=""
+
+
+# ----- CockroachDB ------------------------------------------------------------
+
+# Set the namespace where CockroackDB will be deployed.
+export CRDB_NAMESPACE="crdb"
+
+# Set the database username to be used by Context.
+export CRDB_USERNAME="tfs"
+
+# Set the database user's password to be used by Context.
+export CRDB_PASSWORD="tfs123"
+
+# Set the database name to be used by Context.
+export CRDB_DATABASE="tfs"
+
+# Set CockroachDB installation mode to 'single'. This option is convenient for development and testing.
+# See ./deploy/all.sh or ./deploy/crdb.sh for additional details
+export CRDB_DEPLOY_MODE="single"
+
+# Disable flag for dropping database, if it exists.
+export CRDB_DROP_DATABASE_IF_EXISTS=""
+
+# Disable flag for re-deploying CockroachDB from scratch.
+export CRDB_REDEPLOY=""
+
+
+# ----- NATS -------------------------------------------------------------------
+
+# Set the namespace where NATS will be deployed.
+export NATS_NAMESPACE="nats"
+
+# Disable flag for re-deploying NATS from scratch.
+export NATS_REDEPLOY=""
+
+
+# ----- QuestDB ----------------------------------------------------------------
+
+# Set the namespace where QuestDB will be deployed.
+export QDB_NAMESPACE="qdb"
+
+# Set the database username to be used for QuestDB.
+export QDB_USERNAME="admin"
+
+# Set the database user's password to be used for QuestDB.
+export QDB_PASSWORD="quest"
+
+# Set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
+
+# Set the table name to be used by Slice for plotting groups.
+export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
+
+# Disable flag for dropping tables if they exist.
+export QDB_DROP_TABLES_IF_EXIST=""
+
+# Disable flag for re-deploying QuestDB from scratch.
+export QDB_REDEPLOY=""
-- 
GitLab


From dda9a41312ab02c26f1d6f585f3560dd13faeb6c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 23 Feb 2023 17:45:04 +0000
Subject: [PATCH 140/229] Load Generator:

- Fixed L2NM service generation
---
 src/load_generator/load_gen/RequestGenerator.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index 7e0acbe76..29ec6a90b 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -255,10 +255,16 @@ class RequestGenerator:
             circuit_id = '{:03d}'.format(vlan_id + 100)
 
             src_device_name = self._device_data[src_device_uuid]['name']
-            src_router_id = ROUTER_ID.get(src_device_name, '10.0.0.{:d}'.format(int(src_device_name.replace('R', ''))))
+            src_endpoint_name = self._device_endpoint_data[src_device_uuid][src_endpoint_uuid]['name']
+            src_router_id = ROUTER_ID.get(src_device_name)
+            src_router_num = int(src_device_name.replace('R', ''))
+            if src_router_id is None: src_router_id = '10.0.0.{:d}'.format(src_router_num)
 
             dst_device_name = self._device_data[dst_device_uuid]['name']
-            dst_router_id = ROUTER_ID.get(dst_device_name, '10.0.0.{:d}'.format(int(dst_device_name.replace('R', ''))))
+            dst_endpoint_name = self._device_endpoint_data[dst_device_uuid][dst_endpoint_uuid]['name']
+            dst_router_num = int(dst_device_name.replace('R', ''))
+            dst_router_id = ROUTER_ID.get(dst_device_name)
+            if dst_router_id is None: dst_router_id = '10.0.0.{:d}'.format(dst_router_num)
 
             config_rules = [
                 json_config_rule_set('/settings', {
-- 
GitLab


From 1437fb90a4b4c22dc13c04a22fe72f81389e1c00 Mon Sep 17 00:00:00 2001
From: Ville Hallivuori <VHallivuori@infinera.com>
Date: Fri, 24 Feb 2023 14:07:32 +0200
Subject: [PATCH 141/229] WebUI for creating XR services

---
 src/tests/ofc22/descriptors_emulated_xr.json  |  12 ++
 src/webui/service/service/routes.py           | 182 +++++++++++++++++-
 .../service/templates/service/add-xr.html     | 105 ++++++++++
 src/webui/service/templates/service/home.html |  12 ++
 4 files changed, 308 insertions(+), 3 deletions(-)
 create mode 100644 src/webui/service/templates/service/add-xr.html

diff --git a/src/tests/ofc22/descriptors_emulated_xr.json b/src/tests/ofc22/descriptors_emulated_xr.json
index 4e247bb30..b873d3114 100644
--- a/src/tests/ofc22/descriptors_emulated_xr.json
+++ b/src/tests/ofc22/descriptors_emulated_xr.json
@@ -96,6 +96,18 @@
             "device_operational_status": 1,
             "device_drivers": [6],
             "device_endpoints": []
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "X2-XR-CONSTELLATION"}},
+            "device_type": "xr-constellation",
+            "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "172.19.219.44"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "443"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": "{\"username\": \"xr-user-1\", \"password\": \"xr-user-1\", \"hub_module_name\": \"XR HUB 2\", \"consistency-mode\": \"lifecycle\"}"}}
+            ]},
+            "device_operational_status": 1,
+            "device_drivers": [6],
+            "device_endpoints": []
         }
     ],
     "links": [
diff --git a/src/webui/service/service/routes.py b/src/webui/service/service/routes.py
index defbe2cb0..70a5b5bad 100644
--- a/src/webui/service/service/routes.py
+++ b/src/webui/service/service/routes.py
@@ -12,27 +12,56 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from contextlib import contextmanager
+import json
 import grpc
-from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for
+from collections import defaultdict
+from flask import current_app, redirect, render_template, Blueprint, flash, session, url_for, request
 from common.proto.context_pb2 import (
-    IsolationLevelEnum, Service, ServiceId, ServiceTypeEnum, ServiceStatusEnum, Connection)
+    IsolationLevelEnum, Service, ServiceId, ServiceTypeEnum, ServiceStatusEnum, Connection, Empty, DeviceDriverEnum, ConfigActionEnum, Device, DeviceList)
 from common.tools.context_queries.Context import get_context
+from common.tools.context_queries.Topology import get_topology
 from common.tools.context_queries.EndPoint import get_endpoint_names
 from common.tools.context_queries.Service import get_service
 from context.client.ContextClient import ContextClient
 from service.client.ServiceClient import ServiceClient
+from typing import Optional, Set
+from common.tools.object_factory.Topology import json_topology_id
+from common.tools.object_factory.ConfigRule import json_config_rule_set
+from common.tools.object_factory.Context import json_context_id
 
 service = Blueprint('service', __name__, url_prefix='/service')
 
 context_client = ContextClient()
 service_client = ServiceClient()
 
+@contextmanager
+def connected_client(c):
+    try:
+        c.connect()
+        yield c
+    finally:
+        c.close()
+
+# Context client must be in connected state when calling this function
+def get_device_drivers_in_use(topology_uuid: str, context_uuid: str) -> Set[str]:
+    active_drivers = set()
+    grpc_topology = get_topology(context_client, topology_uuid, context_uuid=context_uuid, rw_copy=False)
+    topo_device_uuids = {device_id.device_uuid.uuid for device_id in grpc_topology.device_ids}
+    grpc_devices: DeviceList = context_client.ListDevices(Empty())
+    for device in grpc_devices.devices:
+        if device.device_id.device_uuid.uuid in topo_device_uuids:
+            for driver in device.device_drivers:
+                active_drivers.add(DeviceDriverEnum.Name(driver))
+    return active_drivers
+
 @service.get('/')
 def home():
     if 'context_uuid' not in session or 'topology_uuid' not in session:
         flash("Please select a context!", "warning")
         return redirect(url_for("main.home"))
     context_uuid = session['context_uuid']
+    topology_uuid = session['topology_uuid']
 
     context_client.connect()
 
@@ -44,10 +73,12 @@ def home():
         try:
             services = context_client.ListServices(context_obj.context_id)
             services = services.services
+            active_drivers = get_device_drivers_in_use(topology_uuid, context_uuid)
         except grpc.RpcError as e:
             if e.code() != grpc.StatusCode.NOT_FOUND: raise
             if e.details() != 'Context({:s}) not found'.format(context_uuid): raise
             services, device_names, endpoints_data = list(), dict(), dict()
+            active_drivers = set()
         else:
             endpoint_ids = list()
             for service_ in services:
@@ -57,7 +88,7 @@ def home():
     context_client.close()
     return render_template(
         'service/home.html', services=services, device_names=device_names, endpoints_data=endpoints_data,
-        ste=ServiceTypeEnum, sse=ServiceStatusEnum)
+        ste=ServiceTypeEnum, sse=ServiceStatusEnum, active_drivers=active_drivers)
 
 
 @service.route('add', methods=['GET', 'POST'])
@@ -67,6 +98,151 @@ def add():
     #return render_template('service/home.html')
 
 
+def get_hub_module_name(dev: Device) -> Optional[str]:
+    for cr in dev.device_config.config_rules:
+        if cr.action == ConfigActionEnum.CONFIGACTION_SET and cr.custom and cr.custom.resource_key == "_connect/settings":
+            try:
+                cr_dict = json.loads(cr.custom.resource_value)
+                if "hub_module_name" in cr_dict:
+                    return cr_dict["hub_module_name"]
+            except json.JSONDecodeError:
+                pass
+    return None
+
+@service.route('add-xr', methods=['GET', 'POST'])
+def add_xr():
+    ### FIXME: copypaste
+    if 'context_uuid' not in session or 'topology_uuid' not in session:
+        flash("Please select a context!", "warning")
+        return redirect(url_for("main.home"))
+
+    context_uuid = session['context_uuid']
+    topology_uuid = session['topology_uuid']
+
+    context_client.connect()
+    grpc_topology = get_topology(context_client, topology_uuid, context_uuid=context_uuid, rw_copy=False)
+    if grpc_topology is None:
+        flash('Context({:s})/Topology({:s}) not found'.format(str(context_uuid), str(topology_uuid)), 'danger')
+        return redirect(url_for("main.home"))
+    else:
+        topo_device_uuids = {device_id.device_uuid.uuid for device_id in grpc_topology.device_ids}
+        grpc_devices= context_client.ListDevices(Empty())
+        devices = [
+            device for device in grpc_devices.devices
+            if device.device_id.device_uuid.uuid in topo_device_uuids and DeviceDriverEnum.DEVICEDRIVER_XR in device.device_drivers
+        ]
+        devices.sort(key=lambda dev: dev.name)
+
+        hub_interfaces_by_device = defaultdict(list)
+        leaf_interfaces_by_device = defaultdict(list)
+        constellation_name_to_uuid = {}
+        dev_ep_to_uuid = {}
+        ep_uuid_to_name = {}
+        for d in devices:
+            constellation_name_to_uuid[d.name] = d.device_id.device_uuid.uuid
+            hm_name = get_hub_module_name(d)
+            if hm_name is not None:
+                hm_if_prefix= hm_name + "|"
+                for ep in d.device_endpoints:
+                    dev_ep_to_uuid[(d.name, ep.name)] = ep.endpoint_id.endpoint_uuid.uuid
+                    if ep.name.startswith(hm_if_prefix):
+                        hub_interfaces_by_device[d.name].append(ep.name)
+                    else:
+                        leaf_interfaces_by_device[d.name].append(ep.name)
+                    ep_uuid_to_name[ep.endpoint_id.endpoint_uuid.uuid] = (d.name, ep.name)
+                hub_interfaces_by_device[d.name].sort()
+                leaf_interfaces_by_device[d.name].sort()
+
+        # Find out what endpoints are already used so that they can be disabled
+        # in the create screen
+        context_obj = get_context(context_client, context_uuid, rw_copy=False)
+        if context_obj is None:
+            flash('Context({:s}) not found'.format(str(context_uuid)), 'danger')
+            return redirect(request.url)
+        
+        services = context_client.ListServices(context_obj.context_id)
+        ep_used_by={}
+        for service in services.services:
+            if  service.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
+                for ep in service.service_endpoint_ids:
+                    ep_uuid = ep.endpoint_uuid.uuid
+                    if ep_uuid in ep_uuid_to_name:
+                        dev_name, ep_name = ep_uuid_to_name[ep_uuid]
+                        ep_used_by[f"{ep_name}@{dev_name}"] = service.name
+
+    context_client.close()
+
+    if request.method != 'POST':
+        return render_template('service/add-xr.html', devices=devices, hub_if=hub_interfaces_by_device, leaf_if=leaf_interfaces_by_device, ep_used_by=ep_used_by)
+    else:
+        service_name = request.form["service_name"]
+        if service_name == "":
+            flash(f"Service name must be specified", 'danger')
+
+        constellation = request.form["constellation"]
+        constellation_uuid = constellation_name_to_uuid.get(constellation, None)
+        if constellation_uuid is None:
+            flash(f"Invalid constellation \"{constellation}\"", 'danger')
+
+        hub_if = request.form["hubif"]
+        hub_if_uuid = dev_ep_to_uuid.get((constellation, hub_if), None)
+        if hub_if_uuid is None:
+            flash(f"Invalid hub interface \"{hub_if}\"", 'danger')
+
+        leaf_if = request.form["leafif"]
+        leaf_if_uuid = dev_ep_to_uuid.get((constellation, leaf_if), None)
+        if leaf_if_uuid is None:
+            flash(f"Invalid leaf interface \"{leaf_if}\"", 'danger')
+        
+        if service_name == "" or constellation_uuid is None or hub_if_uuid is None or leaf_if_uuid is None:
+            return redirect(request.url)
+        
+        
+        json_context_uuid=json_context_id(context_uuid)
+        sr = {
+            "name": service_name,
+            "service_id": {
+                 "context_id": {"context_uuid": {"uuid": context_uuid}},
+                 "service_uuid": {"uuid": service_name}
+            },
+            'service_type'        : ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE,
+            "service_endpoint_ids": [
+                {'device_id': {'device_uuid': {'uuid': constellation_uuid}}, 'endpoint_uuid': {'uuid': hub_if_uuid}, 'topology_id': json_topology_id("admin", context_id=json_context_uuid)},
+                {'device_id': {'device_uuid': {'uuid': constellation_uuid}}, 'endpoint_uuid': {'uuid': leaf_if_uuid}, 'topology_id': json_topology_id("admin", context_id=json_context_uuid)}
+            ],
+            'service_status'      : {'service_status': ServiceStatusEnum.SERVICESTATUS_PLANNED},
+            'service_constraints' : [],
+        }
+
+        json_tapi_settings = {
+            'capacity_value'  : 50.0,
+            'capacity_unit'   : 'GHz',
+            'layer_proto_name': 'PHOTONIC_MEDIA',
+            'layer_proto_qual': 'tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC',
+            'direction'       : 'UNIDIRECTIONAL',
+        }
+        config_rule = json_config_rule_set('/settings', json_tapi_settings)
+
+        with connected_client(service_client) as sc:
+            endpoints, sr['service_endpoint_ids'] = sr['service_endpoint_ids'], []
+            try:
+                create_response = sc.CreateService(Service(**sr))
+            except Exception as e:
+                flash(f'Failure to update service name {service_name} with endpoints and configuration, exception {str(e)}', 'danger')
+                return redirect(request.url)
+            
+            sr['service_endpoint_ids'] = endpoints
+            sr['service_config'] = {'config_rules': [config_rule]}
+
+            try:
+                update_response = sc.UpdateService(Service(**sr))
+                flash(f'Created service {update_response.service_uuid.uuid}', 'success')
+            except Exception as e: 
+                flash(f'Failure to update service {create_response.service_uuid.uuid} with endpoints and configuration, exception {str(e)}', 'danger')
+                return redirect(request.url)
+
+            return redirect(url_for('service.home'))
+
 @service.get('<path:service_uuid>/detail')
 def detail(service_uuid: str):
     if 'context_uuid' not in session or 'topology_uuid' not in session:
diff --git a/src/webui/service/templates/service/add-xr.html b/src/webui/service/templates/service/add-xr.html
new file mode 100644
index 000000000..36fe132ca
--- /dev/null
+++ b/src/webui/service/templates/service/add-xr.html
@@ -0,0 +1,105 @@
+<!--
+ Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+{% extends 'base.html' %}
+
+{% block content %}
+    <script>
+        var js_hub_if = JSON.parse('{{hub_if | tojson | safe}}');
+        var js_leaf_if = JSON.parse('{{leaf_if | tojson | safe}}');
+        var js_ep_used_by = JSON.parse('{{ep_used_by | tojson | safe}}');
+
+        function clear_select_except_first(s) {
+            while (s.options.length > 1) {                
+                s.remove(1);
+            }        
+        }
+
+        function add_ep_to_select(sel, dev_name, ep_name) {
+            used_by = js_ep_used_by[ep_name + "@" + dev_name];
+            var o;
+            if (used_by === undefined) {
+                o = new Option(ep_name, ep_name)
+            } else {
+                o = new Option(ep_name + " (used by " + used_by + ")", ep_name)
+                o.disabled=true
+            }
+            sel.add(o);
+        }
+
+        function constellationSelected() {
+            const constellation_select = document.getElementById('constellation');
+            const hubif_select = document.getElementById('hubif');
+            const leafif_select = document.getElementById('leafif');
+
+            clear_select_except_first(hubif_select)
+            clear_select_except_first(leafif_select)
+            if (constellation_select.value) {
+                const hub_ifs=js_hub_if[constellation_select.value]
+                for (const hi of hub_ifs) {
+                    add_ep_to_select(hubif_select, constellation_select.value, hi);
+                }
+
+                const leaf_ifs=js_leaf_if[constellation_select.value]
+                for (const li of leaf_ifs) {
+                    add_ep_to_select(leafif_select, constellation_select.value, li);
+                }
+            }
+        }
+    </script>
+
+    <h1>Add XR Service</h1>
+        <form action="#" method="post">
+            <fieldset class="form-group row mb-3">
+                <label for="service_name" class="col-sm-3 col-form-label">Service name:</label>
+                <div class="col-sm-9">
+                    <input type="text" id="service_name" name="service_name" class="form-control">
+                </div>
+            </fieldset>
+
+            <fieldset class="form-group row mb-3">
+                <label for="constellation" class="col-sm-3 col-form-label">Constellation:</label>
+                <div class="col-sm-9">
+                    <select name="constellation" id="constellation" onchange="constellationSelected()" class="form-select">
+                        <option value="">(choose constellation)</option>
+                        {% for dev in devices %}
+                            <option value="{{dev.name}}">{{dev.name}}</option>
+                        {% endfor %}
+                    </select>
+                </div>
+            </fieldset>
+
+            <fieldset class="form-group row mb-3">
+                <label for="hubif" class="col-sm-3 col-form-label">Hub Endpoint:</label>
+                <div class="col-sm-9">
+                    <select name="hubif" id="hubif" class="col-sm-8 form-select">
+                        <option value="">(choose hub endpoint)</option>
+                    </select>
+                </div>
+            </fieldset>
+
+            <fieldset class="form-group row mb-3">
+                <label for="leafif" class="col-sm-3 col-form-label">Leaf Endpoint:</label>
+                <div class="col-sm-9">
+                    <select name="leafif" id="leafif" class="col-sm-8 form-select">
+                        <option value="">(choose leaf endpoint)</option>
+                    </select>
+                </div>
+            </fieldset>
+
+            <input type="submit" class="btn btn-primary" value="Create">
+        </form>
+{% endblock %}
diff --git a/src/webui/service/templates/service/home.html b/src/webui/service/templates/service/home.html
index 79b55c962..00feaff59 100644
--- a/src/webui/service/templates/service/home.html
+++ b/src/webui/service/templates/service/home.html
@@ -26,6 +26,18 @@
                 Add New Service
             </a>
         </div> -->
+
+        <!-- Only display XR service addition button if there are XR constellations. Otherwise it might confuse
+             user, as other service types do not have GUI to add service yet. -->
+        {% if "DEVICEDRIVER_XR" in active_drivers %}
+            <div class="col">
+                <a href="{{ url_for('service.add_xr') }}" class="btn btn-primary" style="margin-bottom: 10px;">
+                    <i class="bi bi-plus"></i>
+                    Add New XR Service
+                </a>
+            </div>
+        {% endif %}
+
         <div class="col">
             {{ services | length }} services found in context <i>{{ session['context_uuid'] }}</i>
         </div>
-- 
GitLab


From 40fd5fdaee1b3d43851bd3c35346d503e2be2de3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Juan=20Pedre=C3=B1o=20Manresa?=
 <jpedrenomanresa@adva.com>
Date: Fri, 24 Feb 2023 12:48:12 +0000
Subject: [PATCH 142/229] OFC2023 Ready! Slice component functional with an
 script to generate batches of slices.

---
 .../ietf_network_slice/NSS_Services.py        |  76 ++++-----
 .../ietf_network_slice/ofc23_batch_slices.py  | 144 ++++++++++++++++++
 2 files changed, 185 insertions(+), 35 deletions(-)
 create mode 100644 src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ofc23_batch_slices.py

diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
index df19f9e4a..8f4466694 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
@@ -14,6 +14,7 @@
 import json
 import logging
 import ssl
+import uuid
 from typing import Dict
 from flask.json import jsonify
 from flask_restful import Resource
@@ -71,46 +72,51 @@ class NSS_Services(Resource):
             list_constraints = []
             for cg in ietf_slice.connection_groups().connection_group:
                 for cc in cg.connectivity_construct:
-                    if cc.slo_sle_policy:
-                        if cc.slo_sle_policy.custom:
-                            with cc.slo_sle_policy.custom as slo:
-                                for metric_bound in slo.service_slo_sle_policy().metric_bounds().metric_bound:
-                                    metric_type = str(metric_bound.metric_type()).casefold()
-                                    if metric_type == "service-slo-two-way-bandwidth":  # TODO fix to two way!
-                                        constraint = Constraint()
-                                        metric_unit = metric_bound.metric_unit().casefold()
-                                        capacity = float(metric_bound.bound())  # Assuming capacity already in Gbps
-                                        if metric_unit == "mbps":
-                                            capacity /= 1E3
-                                        elif metric_unit != "gbps":
-                                            LOGGER.warning(f"Invalided metric unit ({metric_bound.metric_unit()}), must be Mbps or Gbps")
-                                            response.status_code = HTTP_SERVERERROR
-                                            return response
-                                        constraint.sla_capacity.capacity_gbps = capacity
-                                        list_constraints.append(constraint)
+                    if cc.slo_sle_policy.custom:
+                        with cc.slo_sle_policy.custom as slo:
+                            for metric_bound in slo.service_slo_sle_policy().metric_bounds().metric_bound:
+                                metric_type = str(metric_bound.metric_type()).casefold()
+                                if metric_type == "service-slo-two-way-bandwidth":  # TODO fix to two way!
+                                    constraint = Constraint()
+                                    metric_unit = metric_bound.metric_unit().casefold()
+                                    capacity = float(metric_bound.bound())  # Assuming capacity already in Gbps
+                                    if metric_unit == "mbps":
+                                        capacity /= 1E3
+                                    elif metric_unit != "gbps":
+                                        LOGGER.warning(f"Invalided metric unit ({metric_bound.metric_unit()}), must be Mbps or Gbps")
+                                        response.status_code = HTTP_SERVERERROR
+                                        return response
+                                    constraint.sla_capacity.capacity_gbps = capacity
+                                    list_constraints.append(constraint)
 
-                                    elif metric_type == "service-slo-one-way-delay":
-                                        if metric_bound.metric_unit().casefold() == "ms":
-                                            latency = int(metric_bound.bound())
-                                        else:
-                                            LOGGER.warning(f"Invalided metric unit ({metric_bound.metric_unit()}), must be \"ms\" ")
-                                            response.status_code = HTTP_SERVERERROR
-                                            return response
-                                        constraint = Constraint()
-                                        constraint.sla_latency.e2e_latency_ms = latency
-                                        list_constraints.append(constraint)
+                                elif metric_type == "service-slo-one-way-delay":
+                                    if metric_bound.metric_unit().casefold() == "ms":
+                                        latency = int(metric_bound.bound())
+                                    else:
+                                        LOGGER.warning(f"Invalided metric unit ({metric_bound.metric_unit()}), must be \"ms\" ")
+                                        response.status_code = HTTP_SERVERERROR
+                                        return response
+                                    constraint = Constraint()
+                                    constraint.sla_latency.e2e_latency_ms = latency
+                                    list_constraints.append(constraint)
 
-                                    elif metric_type == "service-slo-availability":
-                                        availability = float(metric_bound.bound())
-                                        if availability > 100.0 or availability < 0.0:
-                                            raise Exception(f'Slice SLO availability ({availability}) must be constrained [0,100]')
-                                        constraint = Constraint()
-                                        constraint.sla_availability.availability = availability
-                                        list_constraints.append(constraint)
+                                elif metric_type == "service-slo-availability":
+                                    availability = float(metric_bound.bound())
+                                    if availability > 100.0 or availability < 0.0:
+                                        raise Exception(f'Slice SLO availability ({availability}) must be constrained [0,100]')
+                                    constraint = Constraint()
+                                    constraint.sla_availability.availability = availability
+                                    # TODO not really necessary, remove after OFC2023
+                                    constraint.sla_availability.num_disjoint_paths = 0
+                                    constraint.sla_availability.all_active = False
+                                    list_constraints.append(constraint)
 
             slice_request.slice_constraints.extend(list_constraints)
             LOGGER.debug(grpc_message_to_json(slice_request))  # TODO remove
+            # TODO adding owner, needs to be recoded after updating the bindings
+            owner = request.json["data"]["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["service-tags"][0]["value"]
+            slice_request.slice_owner.owner_string = owner
+            slice_request.slice_owner.owner_uuid.uuid = str(uuid.uuid5(uuid.NAMESPACE_DNS, owner))
             slice_client = SliceClient()
             slice_client.CreateSlice(slice_request)
-
         return response
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ofc23_batch_slices.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ofc23_batch_slices.py
new file mode 100644
index 000000000..0b307532e
--- /dev/null
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ofc23_batch_slices.py
@@ -0,0 +1,144 @@
+import json
+import random
+import uuid
+import sys
+import time
+import requests
+
+from bindings.network_slice_services import NetworkSliceServices
+
+
+# R1 emulated devices
+# Port 13-0 is Optical
+# Port 13-1 is Copper
+R1_UUID = "ed2388eb-5fb9-5888-a4f4-160267d3e19b"
+R1_PORT_13_0_UUID_OPTICAL = "20440915-1a6c-5e7b-a80f-b0e0e51f066d"
+R1_PORT_13_1_UUID_COPPER = "ff900d5d-2ac0-576c-9628-a2d016681f9d"
+
+# R2 emulated devices
+# Port 13-0 is Optical
+# Port 13-1 is Copper
+R2_UUID = "49ce0312-1274-523b-97b8-24d0eca2d72d"
+R2_PORT_13_0_UUID_OPTICAL = "214618cb-b63b-5e66-84c2-45c1c016e5f0"
+R2_PORT_13_1_UUID_COPPER = "4e0f7fb4-5d22-56ad-a00e-20bffb4860f9"
+
+# R3 emulated devices
+# Port 13-0 is Optical
+# Port 13-1 is Copper
+R3_UUID = "3bc8e994-a3b9-5f60-9c77-6608b1d08313"
+R3_PORT_13_0_UUID_OPTICAL = "da5196f5-d651-5def-ada6-50ed6430279d"
+R3_PORT_13_1_UUID_COPPER = "43d221fa-5701-5740-a129-502131f5bda2"
+
+# R4 emulated devices
+# Port 13-0 is Optical
+# Port 13-1 is Copper
+R4_UUID = "b43e6361-2573-509d-9a88-1793e751b10d"
+R4_PORT_13_0_UUID_OPTICAL = "241b74a7-8677-595c-ad65-cc9093c1e341"
+R4_PORT_13_1_UUID_COPPER = "c57abf46-caaf-5954-90cc-1fec0a69330e"
+
+node_dict = {R1_PORT_13_1_UUID_COPPER: R1_UUID,
+             R2_PORT_13_1_UUID_COPPER: R2_UUID,
+             R3_PORT_13_1_UUID_COPPER: R3_UUID,
+             R4_PORT_13_1_UUID_COPPER: R4_UUID}
+list_endpoints = [R1_PORT_13_1_UUID_COPPER,
+                  R2_PORT_13_1_UUID_COPPER,
+                  R3_PORT_13_1_UUID_COPPER,
+                  R4_PORT_13_1_UUID_COPPER]
+
+list_availability= [99, 99.9, 99.99, 99.999, 99.9999]
+list_bw = [10, 40, 50, 100, 150, 200, 400]
+list_owner = ["Telefonica", "CTTC", "Telenor", "ADVA", "Ubitech", "ATOS"]
+
+URL_POST = "/restconf/data/ietf-network-slice-service:ietf-nss/network-slice-services"
+URL_DELETE = "/restconf/data/ietf-network-slice-service:ietf-nss/network-slice-services/slice-service="
+
+def generate_request(seed: str) -> (dict, str):
+
+    ns = NetworkSliceServices()
+
+    # Slice 1
+    suuid = str(uuid.uuid5(uuid.NAMESPACE_DNS, str(seed)))
+    slice1 = ns.slice_service[suuid]
+    slice1.service_description = "Test slice for OFC 2023 demo"
+    slice1.status().admin_status().status = "Planned"  # TODO not yet mapped
+
+    '''
+    SDPS:
+    R1 optical to R3 optical
+    '''
+    sdps1 = slice1.sdps().sdp
+    while True:
+        ep1_uuid = random.choice(list_endpoints)
+        ep2_uuid = random.choice(list_endpoints)
+        if ep1_uuid != ep2_uuid:
+            break
+
+    sdps1[ep1_uuid].node_id = node_dict.get(ep1_uuid)
+    sdps1[ep2_uuid].node_id = node_dict.get(ep2_uuid)
+
+    '''
+    Connectivity group
+    Connection construct and 2 sla constrains:
+        - Bandwidth
+        - Availability
+    '''
+    cg_uuid = str(uuid.uuid4())
+    cg = slice1.connection_groups().connection_group
+    cg1 = cg[cg_uuid]
+
+    cc1 = cg1.connectivity_construct[0]
+    cc1.cc_id = 5
+    p2p = cc1.connectivity_construct_type.p2p()
+    p2p.p2p_sender_sdp = ep1_uuid
+    p2p.p2p_receiver_sdp = ep2_uuid
+
+    slo_custom = cc1.slo_sle_policy.custom()
+    metric_bounds = slo_custom.service_slo_sle_policy().metric_bounds().metric_bound
+
+    # SLO Bandwidth
+    slo_bandwidth = metric_bounds["service-slo-two-way-bandwidth"]
+    slo_bandwidth.value_description = "Guaranteed bandwidth"
+    slo_bandwidth.bound = int(random.choice(list_bw))
+    slo_bandwidth.metric_unit = "Gbps"
+
+    # SLO Availability
+    slo_availability = metric_bounds["service-slo-availability"]
+    slo_availability.value_description = "Guaranteed availability"
+    slo_availability.metric_unit = "percentage"
+    slo_availability.bound = random.choice(list_availability)
+
+    json_request = {"data": ns.to_json()}
+
+    #Last, add name and owner manually
+    list_name_owner = [{"tag-type": "owner", "value": random.choice(list_owner)}]
+    json_request["data"]["ietf-network-slice-service:network-slice-services"]["slice-service"][0]["service-tags"] = list_name_owner
+
+    return (json_request, suuid)
+
+
+if __name__ == "__main__":
+    print("Generating requests...")
+    num = int(sys.argv[2])
+    ip = str(sys.argv[1])
+    list_requests = []
+
+    for i in range(num):
+        request = generate_request(i)
+        list_requests.append(request)
+        print(f"HTTP.POST={request[0]}-{request[1]}")
+        time.sleep(2)
+        requests.post(f"http://{ip}{URL_POST}", auth=("admin", "admin"), json=request[0])
+
+    print("Slices sent, please press Enter key to delete them...")
+    input()
+
+    for request,suuid in list_requests:
+        requests.delete(f"http://{ip}{URL_DELETE}{suuid}", auth=("admin", "admin"))
+        print(f"HTTP.DELETE={suuid}")
+        time.sleep(2)
+    print("All slices deleted!")
+
+
+
+
+
-- 
GitLab


From f29a712faf726448180a05d50c8dc91e80e4c681 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 16:29:16 +0000
Subject: [PATCH 143/229] PathComp component - Backend:

- Adjusted max number of endpoints per device
- Adjusted max number of parallel edges between nodes
---
 src/pathcomp/backend/pathComp_tools.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/pathcomp/backend/pathComp_tools.h b/src/pathcomp/backend/pathComp_tools.h
index b6bcea04c..b77078891 100644
--- a/src/pathcomp/backend/pathComp_tools.h
+++ b/src/pathcomp/backend/pathComp_tools.h
@@ -117,7 +117,7 @@ struct map_nodes_t {
 };
 
 #define MAX_NUM_VERTICES				20 // 100 # LGR: reduced from 100 to 20 to divide by 5 the memory used
-#define MAX_NUM_EDGES					40 // 100 # LGR: reduced from 100 to 40 to divide by 2.5 the memory used
+#define MAX_NUM_EDGES					5 // 100 # LGR: reduced from 100 to 5 to divide by 20 the memory used
 // Structures for the graph composition
 struct targetNodes_t {
 	// remote / targeted node
@@ -247,7 +247,7 @@ struct endPoint_t {
 // Structure for the device contents
 ///////////////////////////////////////////////////////////////////
 #define MAX_DEV_TYPE_SIZE				128
-#define MAX_DEV_ENDPOINT_LENGTH			40	// 10 # LGR: controllers might have large number of endpoints
+#define MAX_DEV_ENDPOINT_LENGTH			50	// 10 # LGR: controllers might have large number of endpoints
 struct device_t {
 	gchar deviceId[UUID_CHAR_LENGTH]; // device ID using UUID (128 bits)
 
-- 
GitLab


From adfd2178252de2975dff95b14a80d9bcbc4faa46 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 16:34:05 +0000
Subject: [PATCH 144/229] Tools - Mock MW SDN Ctrl:

- Renamed folder
- Improved error reporting
---
 .../MockMWSdnCtrl.py                          | 50 ++++++++++---------
 .../README.md                                 |  6 +--
 .../scenario}/microwave_deploy.sh             |  0
 .../scenario}/network_descriptors.json        |  0
 .../scenario}/service_descriptor.json         |  0
 .../ssl_not_working/Dockerfile                | 35 +++++++++++++
 .../mock_mw_sdn_ctrl/ssl_not_working/build.sh |  5 ++
 .../ssl_not_working/deploy.sh                 |  4 ++
 .../ssl_not_working/mock-mw-sdn-ctrl.yaml     | 46 +++++++++++++++++
 .../ssl_not_working/requirements.in           | 21 ++++++++
 10 files changed, 141 insertions(+), 26 deletions(-)
 rename src/tests/tools/{mock_sdn_ctrl => mock_mw_sdn_ctrl}/MockMWSdnCtrl.py (76%)
 rename src/tests/tools/{mock_sdn_ctrl => mock_mw_sdn_ctrl}/README.md (94%)
 rename src/tests/tools/{mock_sdn_ctrl => mock_mw_sdn_ctrl/scenario}/microwave_deploy.sh (100%)
 rename src/tests/tools/{mock_sdn_ctrl => mock_mw_sdn_ctrl/scenario}/network_descriptors.json (100%)
 rename src/tests/tools/{mock_sdn_ctrl => mock_mw_sdn_ctrl/scenario}/service_descriptor.json (100%)
 create mode 100644 src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile
 create mode 100755 src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/build.sh
 create mode 100755 src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/deploy.sh
 create mode 100644 src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/mock-mw-sdn-ctrl.yaml
 create mode 100644 src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/requirements.in

diff --git a/src/tests/tools/mock_sdn_ctrl/MockMWSdnCtrl.py b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
similarity index 76%
rename from src/tests/tools/mock_sdn_ctrl/MockMWSdnCtrl.py
rename to src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
index 63be214b6..f002d2376 100644
--- a/src/tests/tools/mock_sdn_ctrl/MockMWSdnCtrl.py
+++ b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
@@ -37,30 +37,30 @@ LOG_LEVEL    = logging.DEBUG
 
 NETWORK_NODES = [
     {'node-id': '172.18.0.1', 'ietf-network-topology:termination-point': [
-        {'tp-id': '172.18.0.1:1', 'ietf-te-topology:te': {'name': 'ethernet'}},
-        {'tp-id': '172.18.0.1:2', 'ietf-te-topology:te': {'name': 'antena'  }},
+        {'tp-id': '1', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'antena'  }},
     ]},
     {'node-id': '172.18.0.2', 'ietf-network-topology:termination-point': [
-        {'tp-id': '172.18.0.2:1', 'ietf-te-topology:te': {'name': 'ethernet'}},
-        {'tp-id': '172.18.0.2:2', 'ietf-te-topology:te': {'name': 'antena'  }},
+        {'tp-id': '1', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'antena'  }},
     ]},
     {'node-id': '172.18.0.3', 'ietf-network-topology:termination-point': [
-        {'tp-id': '172.18.0.3:1', 'ietf-te-topology:te': {'name': 'ethernet'}},
-        {'tp-id': '172.18.0.3:2', 'ietf-te-topology:te': {'name': 'antena'  }},
+        {'tp-id': '1', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'antena'  }},
     ]},
     {'node-id': '172.18.0.4', 'ietf-network-topology:termination-point': [
-        {'tp-id': '172.18.0.4:1', 'ietf-te-topology:te': {'name': 'ethernet'}},
-        {'tp-id': '172.18.0.4:2', 'ietf-te-topology:te': {'name': 'antena'  }},
+        {'tp-id': '1', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'antena'  }},
     ]}
 ]
 NETWORK_LINKS = [
     {
-        'source'     : {'source-node': '172.18.0.1', 'source-tp': '172.18.0.1:2'},
-        'destination': {'dest-node'  : '172.18.0.2', 'dest-tp'  : '172.18.0.2:2'},
+        'source'     : {'source-node': '172.18.0.1', 'source-tp': '2'},
+        'destination': {'dest-node'  : '172.18.0.2', 'dest-tp'  : '2'},
     },
     {
-        'source'     : {'source-node': '172.18.0.3', 'source-tp': '172.18.0.3:2'},
-        'destination': {'dest-node'  : '172.18.0.4', 'dest-tp'  : '172.18.0.4:2'},
+        'source'     : {'source-node': '172.18.0.3', 'source-tp': '2'},
+        'destination': {'dest-node'  : '172.18.0.4', 'dest-tp'  : '2'},
     }
 ]
 NETWORK_SERVICES = {}
@@ -91,17 +91,21 @@ class Services(Resource):
         return jsonify({'ietf-eth-tran-service:etht-svc': {'etht-svc-instances': services}})
 
     def post(self):
-        json_request = request.json
-        if not json_request: abort(400)
-        if not isinstance(json_request, dict): abort(400)
-        if 'etht-svc-instances' not in json_request: abort(400)
-        json_services = json_request['etht-svc-instances']
-        if not isinstance(json_services, list): abort(400)
-        if len(json_services) != 1: abort(400)
-        svc_data = json_services[0]
-        etht_svc_name = svc_data['etht-svc-name']
-        NETWORK_SERVICES[etht_svc_name] = svc_data
-        return jsonify({}), 201
+        try:
+            json_request = request.json
+            if not json_request: abort(400)
+            if not isinstance(json_request, dict): abort(400)
+            if 'etht-svc-instances' not in json_request: abort(400)
+            json_services = json_request['etht-svc-instances']
+            if not isinstance(json_services, list): abort(400)
+            if len(json_services) != 1: abort(400)
+            svc_data = json_services[0]
+            etht_svc_name = svc_data['etht-svc-name']
+            NETWORK_SERVICES[etht_svc_name] = svc_data
+            return jsonify({}), 201
+        except:
+            LOGGER.exception('Exception in POST')
+
 
 class DelServices(Resource):
     def delete(self, service_uuid : str):
diff --git a/src/tests/tools/mock_sdn_ctrl/README.md b/src/tests/tools/mock_mw_sdn_ctrl/README.md
similarity index 94%
rename from src/tests/tools/mock_sdn_ctrl/README.md
rename to src/tests/tools/mock_mw_sdn_ctrl/README.md
index d8a6fe6b2..8568c89ed 100644
--- a/src/tests/tools/mock_sdn_ctrl/README.md
+++ b/src/tests/tools/mock_mw_sdn_ctrl/README.md
@@ -12,8 +12,8 @@ Follow the steps below to perform the test:
 ## 1. Deploy TeraFlowSDN controller and the scenario
 Deploy the test scenario "microwave_deploy.sh":
 ```bash
-source src/tests/tools/microwave_deploy.sh
-./deploy.sh
+source src/tests/tools/mock_mw_sdn_ctrl/scenario/microwave_deploy.sh
+./deploy/all.sh
 ```
 
 ## 2. Install requirements and run the Mock MicroWave SDN controller
@@ -27,7 +27,7 @@ pip install Flask==2.1.3 Flask-RESTful==0.3.9
 
 Run the Mock MicroWave SDN Controller as follows:
 ```bash
-python src/tests/tools/mock_sdn_ctrl/MockMWSdnCtrl.py
+python src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
 ```
 
 ## 3. Deploy the test descriptors
diff --git a/src/tests/tools/mock_sdn_ctrl/microwave_deploy.sh b/src/tests/tools/mock_mw_sdn_ctrl/scenario/microwave_deploy.sh
similarity index 100%
rename from src/tests/tools/mock_sdn_ctrl/microwave_deploy.sh
rename to src/tests/tools/mock_mw_sdn_ctrl/scenario/microwave_deploy.sh
diff --git a/src/tests/tools/mock_sdn_ctrl/network_descriptors.json b/src/tests/tools/mock_mw_sdn_ctrl/scenario/network_descriptors.json
similarity index 100%
rename from src/tests/tools/mock_sdn_ctrl/network_descriptors.json
rename to src/tests/tools/mock_mw_sdn_ctrl/scenario/network_descriptors.json
diff --git a/src/tests/tools/mock_sdn_ctrl/service_descriptor.json b/src/tests/tools/mock_mw_sdn_ctrl/scenario/service_descriptor.json
similarity index 100%
rename from src/tests/tools/mock_sdn_ctrl/service_descriptor.json
rename to src/tests/tools/mock_mw_sdn_ctrl/scenario/service_descriptor.json
diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile
new file mode 100644
index 000000000..ad214b97c
--- /dev/null
+++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile
@@ -0,0 +1,35 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 python:3.9-slim
+
+# Set Python to show logs as they occur
+ENV PYTHONUNBUFFERED=0
+
+# Get generic Python packages
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install --upgrade setuptools wheel
+RUN python3 -m pip install --upgrade pip-tools
+
+# Create component sub-folder, and copy content
+RUN mkdir -p /var/teraflow/mock_mw_sdn_ctrl
+WORKDIR /var/teraflow/mock_mw_sdn_ctrl
+COPY . .
+
+# Get specific Python packages
+RUN pip-compile --quiet --output-file=requirements.txt requirements.in
+RUN python3 -m pip install -r requirements.txt
+
+# Start the service
+ENTRYPOINT ["python", "MockMWSdnCtrl.py"]
diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/build.sh b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/build.sh
new file mode 100755
index 000000000..4df315cec
--- /dev/null
+++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/build.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+docker build -t mock-mw-sdn-ctrl:test -f Dockerfile .
+docker tag mock-mw-sdn-ctrl:test localhost:32000/tfs/mock-mw-sdn-ctrl:test
+docker push localhost:32000/tfs/mock-mw-sdn-ctrl:test
diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/deploy.sh b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/deploy.sh
new file mode 100755
index 000000000..ded232e5c
--- /dev/null
+++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/deploy.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+kubectl delete namespace mocks
+kubectl --namespace mocks apply -f mock-mw-sdn-ctrl.yaml
diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/mock-mw-sdn-ctrl.yaml b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/mock-mw-sdn-ctrl.yaml
new file mode 100644
index 000000000..05b89f949
--- /dev/null
+++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/mock-mw-sdn-ctrl.yaml
@@ -0,0 +1,46 @@
+kind: Namespace
+apiVersion: v1
+metadata:
+  name: mocks
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: mock-mw-sdn-ctrl
+spec:
+  selector:
+    matchLabels:
+      app: mock-mw-sdn-ctrl
+  replicas: 1
+  template:
+    metadata:
+      labels:
+        app: mock-mw-sdn-ctrl
+    spec:
+      terminationGracePeriodSeconds: 5
+      containers:
+      - name: server
+        image: localhost:32000/tfs/mock-mw-sdn-ctrl:test
+        imagePullPolicy: IfNotPresent
+        ports:
+        - containerPort: 8443
+        resources:
+          requests:
+            cpu: 250m
+            memory: 512Mi
+          limits:
+            cpu: 700m
+            memory: 1024Mi
+---
+apiVersion: v1
+kind: Service
+metadata:
+  name: mock-mw-sdn-ctrl
+spec:
+  type: ClusterIP
+  selector:
+    app: mock-mw-sdn-ctrl
+  ports:
+  - name: https
+    port: 8443
+    targetPort: 8443
diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/requirements.in b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/requirements.in
new file mode 100644
index 000000000..f4bc19106
--- /dev/null
+++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/requirements.in
@@ -0,0 +1,21 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cryptography==39.0.1
+pyopenssl==23.0.0
+Flask==2.1.3
+Flask-HTTPAuth==4.5.0
+Flask-RESTful==0.3.9
+jsonschema==4.4.0
+requests==2.27.1
-- 
GitLab


From 6323b7441b918434e4352a74fbb72ba3c18946e0 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 16:34:47 +0000
Subject: [PATCH 145/229] WebUI component:

- Added Endpoint Name in Link, Service and Slice
---
 src/webui/service/templates/link/detail.html    | 4 ++++
 src/webui/service/templates/service/detail.html | 4 ++++
 src/webui/service/templates/slice/detail.html   | 4 ++++
 3 files changed, 12 insertions(+)

diff --git a/src/webui/service/templates/link/detail.html b/src/webui/service/templates/link/detail.html
index acac4a553..916abafde 100644
--- a/src/webui/service/templates/link/detail.html
+++ b/src/webui/service/templates/link/detail.html
@@ -37,6 +37,7 @@
                         <thead>
                             <tr>
                                 <th scope="col">Endpoint UUID</th>
+                                <th scope="col">Name</th>
                                 <th scope="col">Device</th>
                                 <th scope="col">Endpoint Type</th>
                             </tr>
@@ -44,6 +45,9 @@
                         <tbody>
                               {% for endpoint in link.link_endpoint_ids %}
                               <tr>
+                                   <td>
+                                        {{ endpoint.endpoint_uuid.uuid }}
+                                   </td>
                                    <td>
                                         {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }}
                                    </td>
diff --git a/src/webui/service/templates/service/detail.html b/src/webui/service/templates/service/detail.html
index bee2e93c5..414aa19d0 100644
--- a/src/webui/service/templates/service/detail.html
+++ b/src/webui/service/templates/service/detail.html
@@ -55,6 +55,7 @@
             <thead>
                 <tr>
                     <th scope="col">Endpoint UUID</th>
+                    <th scope="col">Name</th>
                     <th scope="col">Device</th>
                     <th scope="col">Endpoint Type</th>
                 </tr>
@@ -62,6 +63,9 @@
             <tbody>
                 {% for endpoint in service.service_endpoint_ids %}
                 <tr>
+                    <td>
+                        {{ endpoint.endpoint_uuid.uuid }}
+                   </td>
                     <td>
                         {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }}
                     </td>
diff --git a/src/webui/service/templates/slice/detail.html b/src/webui/service/templates/slice/detail.html
index 8f223e44d..13b69defe 100644
--- a/src/webui/service/templates/slice/detail.html
+++ b/src/webui/service/templates/slice/detail.html
@@ -55,6 +55,7 @@
             <thead>
                 <tr>
                     <th scope="col">Endpoint UUID</th>
+                    <th scope="col">Name</th>
                     <th scope="col">Device</th>
                     <th scope="col">Endpoint Type</th>
                 </tr>
@@ -62,6 +63,9 @@
             <tbody>
                 {% for endpoint in slice.slice_endpoint_ids %}
                 <tr>
+                    <td>
+                        {{ endpoint.endpoint_uuid.uuid }}
+                   </td>
                     <td>
                         {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }}
                     </td>
-- 
GitLab


From ffe1454fe9f04a0ceeeb5005c102d6bdd2979ac3 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 16:39:50 +0000
Subject: [PATCH 146/229] Service component:

- Improved filter to select service handler
- Disabled configuration of devices when there is nothing to configure
- Corrected TAPI Service Handler to use endpoint uuids instead of names
- Extended filters for selecting MicroWave Service Handler
- First implementation of L2NM IETF L2VPN Service Handler
- Extended service handler selector to be aware of devices managed by a controller
- Minor cosmetic changes
---
 .../ServiceHandlerFactory.py                  |  3 ++
 .../service/service_handlers/__init__.py      |  2 +-
 .../l2nm_emulated/ConfigRules.py              | 16 ++++++---
 .../L2NM_IETFL2VPN_ServiceHandler.py          | 36 ++++++++-----------
 .../l2nm_openconfig/ConfigRules.py            | 19 +++++-----
 .../l3nm_emulated/ConfigRules.py              | 14 +++++---
 .../l3nm_openconfig/ConfigRules.py            |  4 +--
 .../microwave/MicrowaveServiceHandler.py      |  4 +--
 .../tapi_tapi/TapiServiceHandler.py           | 12 +++----
 .../service/task_scheduler/TaskExecutor.py    | 27 ++++++++++++--
 .../tasks/Task_ConnectionConfigure.py         |  2 +-
 .../tasks/Task_ConnectionDeconfigure.py       |  2 +-
 .../tasks/Task_ServiceDelete.py               |  2 +-
 .../tasks/Task_ServiceSetStatus.py            |  2 +-
 14 files changed, 86 insertions(+), 59 deletions(-)

diff --git a/src/service/service/service_handler_api/ServiceHandlerFactory.py b/src/service/service/service_handler_api/ServiceHandlerFactory.py
index 6aa21b499..64ea204a2 100644
--- a/src/service/service/service_handler_api/ServiceHandlerFactory.py
+++ b/src/service/service/service_handler_api/ServiceHandlerFactory.py
@@ -73,6 +73,9 @@ class ServiceHandlerFactory:
             if field_indice is None: continue
             if not isinstance(field_values, Iterable) or isinstance(field_values, str):
                 field_values = [field_values]
+            if len(field_values) == 0:
+                # do not allow empty fields; might cause wrong selection
+                raise UnsatisfiedFilterException(filter_fields)
 
             field_enum_values = FILTER_FIELD_ALLOWED_VALUES.get(field_name)
 
diff --git a/src/service/service/service_handlers/__init__.py b/src/service/service/service_handlers/__init__.py
index 9b4e442e5..fa215af2f 100644
--- a/src/service/service/service_handlers/__init__.py
+++ b/src/service/service/service_handlers/__init__.py
@@ -57,7 +57,7 @@ SERVICE_HANDLERS = [
     (MicrowaveServiceHandler, [
         {
             FilterFieldEnum.SERVICE_TYPE  : ServiceTypeEnum.SERVICETYPE_L2NM,
-            FilterFieldEnum.DEVICE_DRIVER : DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY,
+            FilterFieldEnum.DEVICE_DRIVER : [DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352],
         }
     ]),
     (P4ServiceHandler, [
diff --git a/src/service/service/service_handlers/l2nm_emulated/ConfigRules.py b/src/service/service/service_handlers/l2nm_emulated/ConfigRules.py
index c2ea6e213..84467dd2d 100644
--- a/src/service/service/service_handlers/l2nm_emulated/ConfigRules.py
+++ b/src/service/service/service_handlers/l2nm_emulated/ConfigRules.py
@@ -21,10 +21,13 @@ def setup_config_rules(
     service_settings : TreeNode, endpoint_settings : TreeNode
 ) -> List[Dict]:
 
-    json_settings          : Dict = {} if service_settings  is None else service_settings.value
-    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
+    if service_settings  is None: return []
+    if endpoint_settings is None: return []
 
-    mtu                 = json_settings.get('mtu',                 1450 )    # 1512
+    #json_settings          : Dict = service_settings.value
+    json_endpoint_settings : Dict = endpoint_settings.value
+
+    #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
     #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
     #bgp_as              = json_settings.get('bgp_as',              0    )    # 65000
     #bgp_route_target    = json_settings.get('bgp_route_target',    '0:0')    # 65000:333
@@ -80,8 +83,11 @@ def teardown_config_rules(
     service_settings : TreeNode, endpoint_settings : TreeNode
 ) -> List[Dict]:
 
-    #json_settings          : Dict = {} if service_settings  is None else service_settings.value
-    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
+    if service_settings  is None: return []
+    if endpoint_settings is None: return []
+
+    #json_settings          : Dict = service_settings.value
+    json_endpoint_settings : Dict = endpoint_settings.value
 
     #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
     #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
diff --git a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
index 1f5817fe8..f84c8c824 100644
--- a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
+++ b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
@@ -47,34 +47,28 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
         service_uuid = self.__service.service_id.service_uuid.uuid
         settings = self.__settings_handler.get('/settings')
         json_settings : Dict = {} if settings is None else settings.value
-        capacity_value   = json_settings.get('capacity_value',   50.0)
-        capacity_unit    = json_settings.get('capacity_unit',    'GHz')
-        layer_proto_name = json_settings.get('layer_proto_name', 'PHOTONIC_MEDIA')
-        layer_proto_qual = json_settings.get('layer_proto_qual', 'tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC')
-        direction        = json_settings.get('direction',        'UNIDIRECTIONAL')
+        encap_type = json_settings.get('encapsulation_type', '')
+        vlan_id    = json_settings.get('vlan_id', 100)
 
         results = []
         try:
-            device_uuid_src, endpoint_uuid_src = get_device_endpoint_uuids(endpoints[0])
-            device_uuid_dst, endpoint_uuid_dst = get_device_endpoint_uuids(endpoints[1])
+            src_device_uuid, src_endpoint_uuid = get_device_endpoint_uuids(endpoints[0])
+            dst_device_uuid, dst_endpoint_uuid = get_device_endpoint_uuids(endpoints[1])
 
-            if device_uuid_src != device_uuid_dst:
-                raise Exception('Diferent Src-Dst devices not supported by now')
-            device_uuid = device_uuid_src
+            if src_device_uuid != dst_device_uuid:
+                raise Exception('Different Src-Dst devices not supported by now')
+            device_uuid = src_device_uuid
 
             device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
-            endpoint_name_src = get_endpoint_matching(device_obj, endpoint_uuid_src).name
-            endpoint_name_dst = get_endpoint_matching(device_obj, endpoint_uuid_dst).name
 
             json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
-                'uuid'                    : service_uuid,
-                'input_sip'               : endpoint_name_src,
-                'output_sip'              : endpoint_name_dst,
-                'capacity_unit'           : capacity_unit,
-                'capacity_value'          : capacity_value,
-                'layer_protocol_name'     : layer_proto_name,
-                'layer_protocol_qualifier': layer_proto_qual,
-                'direction'               : direction,
+                'uuid'              : service_uuid,
+                'src_device_uuid'   : src_device_uuid,
+                'src_endpoint_uuid' : src_endpoint_uuid,
+                'dst_device_uuid'   : dst_device_uuid,
+                'dst_endpoint_uuid' : dst_endpoint_uuid,
+                'encapsulation_type': encap_type,
+                'vlan_id'           : vlan_id,
             })
             del device_obj.device_config.config_rules[:]
             device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
@@ -102,7 +96,7 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
             device_uuid_dst, _ = get_device_endpoint_uuids(endpoints[1])
 
             if device_uuid_src != device_uuid_dst:
-                raise Exception('Diferent Src-Dst devices not supported by now')
+                raise Exception('Different Src-Dst devices not supported by now')
             device_uuid = device_uuid_src
 
             device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
diff --git a/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
index bbd91df93..58071f28a 100644
--- a/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
@@ -24,12 +24,9 @@ def setup_config_rules(
     if service_settings  is None: return []
     if endpoint_settings is None: return []
 
-    json_settings          : Dict = service_settings.value
+    #json_settings          : Dict = service_settings.value
     json_endpoint_settings : Dict = endpoint_settings.value
 
-    json_settings          : Dict = {} if service_settings  is None else service_settings.value
-    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
-
     #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
     #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
     #bgp_as              = json_settings.get('bgp_as',              0    )    # 65000
@@ -41,16 +38,15 @@ def setup_config_rules(
     vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     #address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     #address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
-    remote_router       = json_endpoint_settings.get('remote_router',       '5.5.5.5')  # '5.5.5.5'
-    circuit_id          = json_endpoint_settings.get('circuit_id',          '111'    )  # '111'
-    
+    remote_router       = json_endpoint_settings.get('remote_router',       '0.0.0.0')  # '5.5.5.5'
+    circuit_id          = json_endpoint_settings.get('circuit_id',          '000'    )  # '111'
 
     if_cirid_name         = '{:s}.{:s}'.format(endpoint_name, str(circuit_id))
     network_instance_name = 'ELAN-AC:{:s}'.format(str(circuit_id))
     connection_point_id   = 'VC-1'
 
     json_config_rules = [
-        
+
         json_config_rule_set(
             '/network_instance[{:s}]'.format(network_instance_name),
             {'name': network_instance_name, 
@@ -86,8 +82,11 @@ def teardown_config_rules(
     service_settings : TreeNode, endpoint_settings : TreeNode
 ) -> List[Dict]:
 
-    #json_settings          : Dict = {} if service_settings  is None else service_settings.value
-    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
+    if service_settings  is None: return []
+    if endpoint_settings is None: return []
+
+    #json_settings          : Dict = service_settings.value
+    json_endpoint_settings : Dict = endpoint_settings.value
 
     #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
     #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
diff --git a/src/service/service/service_handlers/l3nm_emulated/ConfigRules.py b/src/service/service/service_handlers/l3nm_emulated/ConfigRules.py
index 903ad8cd5..f4a46112e 100644
--- a/src/service/service/service_handlers/l3nm_emulated/ConfigRules.py
+++ b/src/service/service/service_handlers/l3nm_emulated/ConfigRules.py
@@ -21,8 +21,11 @@ def setup_config_rules(
     service_settings : TreeNode, endpoint_settings : TreeNode
 ) -> List[Dict]:
 
-    json_settings          : Dict = {} if service_settings  is None else service_settings.value
-    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
+    if service_settings  is None: return []
+    if endpoint_settings is None: return []
+
+    json_settings          : Dict = service_settings.value
+    json_endpoint_settings : Dict = endpoint_settings.value
 
     service_short_uuid        = service_uuid.split('-')[-1]
     network_instance_name     = '{:s}-NetInst'.format(service_short_uuid)
@@ -142,8 +145,11 @@ def teardown_config_rules(
     service_settings : TreeNode, endpoint_settings : TreeNode
 ) -> List[Dict]:
 
-    json_settings          : Dict = {} if service_settings  is None else service_settings.value
-    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
+    if service_settings  is None: return []
+    if endpoint_settings is None: return []
+
+    json_settings          : Dict = service_settings.value
+    json_endpoint_settings : Dict = endpoint_settings.value
 
     #mtu                 = json_settings.get('mtu',                 1450 )    # 1512
     #address_families    = json_settings.get('address_families',    []   )    # ['IPV4']
diff --git a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
index 351efe5a5..4984fd77c 100644
--- a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
@@ -187,8 +187,8 @@ def teardown_config_rules(
     if service_settings  is None: return []
     if endpoint_settings is None: return []
 
-    json_settings          : Dict = {} if service_settings  is None else service_settings.value
-    json_endpoint_settings : Dict = {} if endpoint_settings is None else endpoint_settings.value
+    json_settings          : Dict = service_settings.value
+    json_endpoint_settings : Dict = endpoint_settings.value
 
     service_short_uuid        = service_uuid.split('-')[-1]
     network_instance_name     = '{:s}-NetInst'.format(service_short_uuid)
diff --git a/src/service/service/service_handlers/microwave/MicrowaveServiceHandler.py b/src/service/service/service_handlers/microwave/MicrowaveServiceHandler.py
index ee64d2fa4..40c87eeee 100644
--- a/src/service/service/service_handlers/microwave/MicrowaveServiceHandler.py
+++ b/src/service/service/service_handlers/microwave/MicrowaveServiceHandler.py
@@ -61,7 +61,7 @@ class MicrowaveServiceHandler(_ServiceHandler):
             device_uuid_dst, endpoint_uuid_dst = get_device_endpoint_uuids(endpoints[1])
 
             if device_uuid_src != device_uuid_dst:
-                raise Exception('Diferent Src-Dst devices not supported by now')
+                raise Exception('Different Src-Dst devices not supported by now')
             device_uuid = device_uuid_src
 
             device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
@@ -106,7 +106,7 @@ class MicrowaveServiceHandler(_ServiceHandler):
             device_uuid_dst, _ = get_device_endpoint_uuids(endpoints[1])
 
             if device_uuid_src != device_uuid_dst:
-                raise Exception('Diferent Src-Dst devices not supported by now')
+                raise Exception('Different Src-Dst devices not supported by now')
             device_uuid = device_uuid_src
 
             device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
diff --git a/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py b/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py
index 8abd12b2a..dd9ff092a 100644
--- a/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py
+++ b/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py
@@ -19,7 +19,7 @@ from common.proto.context_pb2 import ConfigRule, DeviceId, Service
 from common.tools.object_factory.ConfigRule import json_config_rule_delete, json_config_rule_set
 from common.tools.object_factory.Device import json_device_id
 from common.type_checkers.Checkers import chk_type
-from service.service.service_handler_api.Tools import get_device_endpoint_uuids, get_endpoint_matching
+from service.service.service_handler_api.Tools import get_device_endpoint_uuids
 from service.service.service_handler_api._ServiceHandler import _ServiceHandler
 from service.service.service_handler_api.SettingsHandler import SettingsHandler
 from service.service.task_scheduler.TaskExecutor import TaskExecutor
@@ -59,17 +59,15 @@ class TapiServiceHandler(_ServiceHandler):
             device_uuid_dst, endpoint_uuid_dst = get_device_endpoint_uuids(endpoints[1])
 
             if device_uuid_src != device_uuid_dst:
-                raise Exception('Diferent Src-Dst devices not supported by now')
+                raise Exception('Different Src-Dst devices not supported by now')
             device_uuid = device_uuid_src
 
             device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
-            endpoint_name_src = get_endpoint_matching(device_obj, endpoint_uuid_src).name
-            endpoint_name_dst = get_endpoint_matching(device_obj, endpoint_uuid_dst).name
 
             json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
                 'uuid'                    : service_uuid,
-                'input_sip'               : endpoint_name_src,
-                'output_sip'              : endpoint_name_dst,
+                'input_sip'               : endpoint_uuid_src,
+                'output_sip'              : endpoint_uuid_dst,
                 'capacity_unit'           : capacity_unit,
                 'capacity_value'          : capacity_value,
                 'layer_protocol_name'     : layer_proto_name,
@@ -102,7 +100,7 @@ class TapiServiceHandler(_ServiceHandler):
             device_uuid_dst, _ = get_device_endpoint_uuids(endpoints[1])
 
             if device_uuid_src != device_uuid_dst:
-                raise Exception('Diferent Src-Dst devices not supported by now')
+                raise Exception('Different Src-Dst devices not supported by now')
             device_uuid = device_uuid_src
 
             device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
diff --git a/src/service/service/task_scheduler/TaskExecutor.py b/src/service/service/task_scheduler/TaskExecutor.py
index 932c56e2b..e475f29c6 100644
--- a/src/service/service/task_scheduler/TaskExecutor.py
+++ b/src/service/service/task_scheduler/TaskExecutor.py
@@ -12,10 +12,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import json
 from enum import Enum
 from typing import TYPE_CHECKING, Any, Dict, Optional, Union
 from common.method_wrappers.ServiceExceptions import NotFoundException
 from common.proto.context_pb2 import Connection, ConnectionId, Device, DeviceId, Service, ServiceId
+from common.tools.object_factory.Device import json_device_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
 from service.service.service_handler_api.ServiceHandlerFactory import ServiceHandlerFactory, get_service_handler_class
@@ -103,13 +105,32 @@ class TaskExecutor:
         self._device_client.ConfigureDevice(device)
         self._store_grpc_object(CacheableObjectType.DEVICE, device_key, device)
 
-    def get_devices_from_connection(self, connection : Connection) -> Dict[str, Device]:
+    def get_devices_from_connection(
+        self, connection : Connection, exclude_managed : bool = False
+    ) -> Dict[str, Device]:
         devices = dict()
         for endpoint_id in connection.path_hops_endpoint_ids:
             device = self.get_device(endpoint_id.device_id)
             device_uuid = endpoint_id.device_id.device_uuid.uuid
             if device is None: raise Exception('Device({:s}) not found'.format(str(device_uuid)))
-            devices[device_uuid] = device
+
+            manager = None
+            for config_rule in device.device_config.config_rules:
+                if config_rule.WhichOneof('config_rule') != 'custom': continue
+                if config_rule.custom.resource_key != '_manager': continue
+                manager = json.loads(config_rule.custom.resource_value)
+                break
+
+            if manager is not None:
+                if not exclude_managed:
+                    devices[device_uuid] = device
+                manager_uuid = manager['uuid']
+                manager = self.get_device(DeviceId(**json_device_id(manager_uuid)))
+                manager_uuid = manager.device_id.device_uuid.uuid
+                if manager is None: raise Exception('Device({:s}) not found'.format(str(manager_uuid)))
+                devices[manager_uuid] = manager
+            else:
+                devices[device_uuid] = device
         return devices
 
     # ----- Service-related methods ------------------------------------------------------------------------------------
@@ -139,6 +160,6 @@ class TaskExecutor:
     def get_service_handler(
         self, connection : Connection, service : Service, **service_handler_settings
     ) -> '_ServiceHandler':
-        connection_devices = self.get_devices_from_connection(connection)
+        connection_devices = self.get_devices_from_connection(connection, exclude_managed=True)
         service_handler_class = get_service_handler_class(self._service_handler_factory, service, connection_devices)
         return service_handler_class(service, self, **service_handler_settings)
diff --git a/src/service/service/task_scheduler/tasks/Task_ConnectionConfigure.py b/src/service/service/task_scheduler/tasks/Task_ConnectionConfigure.py
index 5a47005b3..4367ffdee 100644
--- a/src/service/service/task_scheduler/tasks/Task_ConnectionConfigure.py
+++ b/src/service/service/task_scheduler/tasks/Task_ConnectionConfigure.py
@@ -32,7 +32,7 @@ class Task_ConnectionConfigure(_Task):
     def connection_id(self) -> ConnectionId: return self._connection_id
 
     @staticmethod
-    def build_key(connection_id : ConnectionId) -> str:
+    def build_key(connection_id : ConnectionId) -> str: # pylint: disable=arguments-differ
         str_connection_id = get_connection_key(connection_id)
         return KEY_TEMPLATE.format(connection_id=str_connection_id)
 
diff --git a/src/service/service/task_scheduler/tasks/Task_ConnectionDeconfigure.py b/src/service/service/task_scheduler/tasks/Task_ConnectionDeconfigure.py
index 5736054fe..70f41566e 100644
--- a/src/service/service/task_scheduler/tasks/Task_ConnectionDeconfigure.py
+++ b/src/service/service/task_scheduler/tasks/Task_ConnectionDeconfigure.py
@@ -32,7 +32,7 @@ class Task_ConnectionDeconfigure(_Task):
     def connection_id(self) -> ConnectionId: return self._connection_id
 
     @staticmethod
-    def build_key(connection_id : ConnectionId) -> str:
+    def build_key(connection_id : ConnectionId) -> str: # pylint: disable=arguments-differ
         str_connection_id = get_connection_key(connection_id)
         return KEY_TEMPLATE.format(connection_id=str_connection_id)
 
diff --git a/src/service/service/task_scheduler/tasks/Task_ServiceDelete.py b/src/service/service/task_scheduler/tasks/Task_ServiceDelete.py
index 6a4e11b54..0f021b6ca 100644
--- a/src/service/service/task_scheduler/tasks/Task_ServiceDelete.py
+++ b/src/service/service/task_scheduler/tasks/Task_ServiceDelete.py
@@ -28,7 +28,7 @@ class Task_ServiceDelete(_Task):
     def service_id(self) -> ServiceId: return self._service_id
 
     @staticmethod
-    def build_key(service_id : ServiceId) -> str:
+    def build_key(service_id : ServiceId) -> str:   # pylint: disable=arguments-differ
         str_service_id = get_service_key(service_id)
         return KEY_TEMPLATE.format(service_id=str_service_id)
 
diff --git a/src/service/service/task_scheduler/tasks/Task_ServiceSetStatus.py b/src/service/service/task_scheduler/tasks/Task_ServiceSetStatus.py
index 815cb33c3..d5360fe85 100644
--- a/src/service/service/task_scheduler/tasks/Task_ServiceSetStatus.py
+++ b/src/service/service/task_scheduler/tasks/Task_ServiceSetStatus.py
@@ -32,7 +32,7 @@ class Task_ServiceSetStatus(_Task):
     def new_status(self) -> ServiceStatusEnum: return self._new_status
 
     @staticmethod
-    def build_key(service_id : ServiceId, new_status : ServiceStatusEnum) -> str:
+    def build_key(service_id : ServiceId, new_status : ServiceStatusEnum) -> str:   # pylint: disable=arguments-differ
         str_service_id = get_service_key(service_id)
         str_new_status = ServiceStatusEnum.Name(new_status)
         return KEY_TEMPLATE.format(service_id=str_service_id, new_status=str_new_status)
-- 
GitLab


From faa68396aa2ff238d28e3a01f3ee7a90a83f6fd5 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 16:41:22 +0000
Subject: [PATCH 147/229] OFC'23 test:

- Updated child deploy script to prevent re-building images after parent
- Updated descriptor files
---
 src/tests/ofc23/deploy_specs_child.sh         |   2 +-
 .../ofc23/descriptors/dc-2-dc-service.json    |  44 ++++
 .../ofc23/descriptors/descriptor_parent.json  | 212 +++++++-----------
 .../descriptors/descriptor_parent_l2vpn.json  |  20 --
 src/tests/ofc23/descriptors/idc-slice.json    |  20 --
 src/tests/ofc23/descriptors/splitter.json     |  18 ++
 6 files changed, 141 insertions(+), 175 deletions(-)
 create mode 100644 src/tests/ofc23/descriptors/dc-2-dc-service.json
 delete mode 100644 src/tests/ofc23/descriptors/descriptor_parent_l2vpn.json
 delete mode 100644 src/tests/ofc23/descriptors/idc-slice.json
 create mode 100644 src/tests/ofc23/descriptors/splitter.json

diff --git a/src/tests/ofc23/deploy_specs_child.sh b/src/tests/ofc23/deploy_specs_child.sh
index 2cb323651..0349dba5a 100755
--- a/src/tests/ofc23/deploy_specs_child.sh
+++ b/src/tests/ofc23/deploy_specs_child.sh
@@ -36,7 +36,7 @@ export TFS_EXTRA_MANIFESTS="ofc23/tfs-ingress-child.yaml"
 export TFS_GRAFANA_PASSWORD="admin123+"
 
 # Disable skip-build flag to rebuild the Docker images.
-export TFS_SKIP_BUILD=""
+export TFS_SKIP_BUILD="YES"
 
 
 # ----- CockroachDB ------------------------------------------------------------
diff --git a/src/tests/ofc23/descriptors/dc-2-dc-service.json b/src/tests/ofc23/descriptors/dc-2-dc-service.json
new file mode 100644
index 000000000..e60b7489b
--- /dev/null
+++ b/src/tests/ofc23/descriptors/dc-2-dc-service.json
@@ -0,0 +1,44 @@
+{
+    "services": [
+        {
+            "service_id": {
+                "context_id": {"context_uuid": {"uuid": "admin"}}, "service_uuid": {"uuid": "dc-2-dc-svc"}
+            },
+            "service_type": 2,
+            "service_status": {"service_status": 1},
+            "service_endpoint_ids": [
+                {"device_id":{"device_uuid":{"uuid":"DC1"}},"endpoint_uuid":{"uuid":"int"}},
+                {"device_id":{"device_uuid":{"uuid":"DC2"}},"endpoint_uuid":{"uuid":"int"}}
+            ],
+            "service_constraints": [
+                {"sla_capacity": {"capacity_gbps": 10.0}},
+                {"sla_latency": {"e2e_latency_ms": 15.2}}
+            ],
+            "service_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "/settings", "resource_value": {
+                    "address_families": ["IPV4"],
+                    "bgp_as": 65000,
+                    "bgp_route_target": "65000:333",
+                    "mtu": 1512,
+                    "vlan_id": 300
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[PE1]/endpoint[1/1]/settings", "resource_value": {
+                    "address_ip": "3.3.2.1",
+                    "address_prefix": 24,
+                    "route_distinguisher": "65000:123",
+                    "router_id": "10.10.10.1",
+                    "sub_interface_index": 400,
+                    "vlan_id": 400
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[PE3]/endpoint[1/1]/settings", "resource_value": {
+                    "address_ip": "3.3.1.1",
+                    "address_prefix": 24,
+                    "route_distinguisher": "65000:321",
+                    "router_id": "20.20.20.1",
+                    "sub_interface_index": 400,
+                    "vlan_id": 500
+                }}}
+            ]}
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/descriptor_parent.json b/src/tests/ofc23/descriptors/descriptor_parent.json
index ca3f1e8e1..fd6b23857 100644
--- a/src/tests/ofc23/descriptors/descriptor_parent.json
+++ b/src/tests/ofc23/descriptors/descriptor_parent.json
@@ -6,118 +6,67 @@
         {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
     ],
     "devices": [
-
-
-
-        {
-            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "PE1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "PE2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
-                ]}}}
-            ]}
-        },
         {
-            "device_id": {"device_uuid": {"uuid": "MW"}}, "device_type": "emu-microwave-radio-system", "device_drivers": [0],
+            "device_id": {"device_uuid": {"uuid": "TFS-IP"}}, "device_type": "teraflowsdn", "device_drivers": [7],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "192.168.27.139:10"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "192.168.27.140:8"}
-                ], "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
-                    "node_ids": ["192.168.27.139", "192.168.27.140"]
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8002"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "scheme": "http", "username": "admin", "password": "admin"
                 }}}
             ]}
         },
-
         {
-            "device_id": {"device_uuid": {"uuid": "IPM"}}, "device_type": "emu-xr-constellation", "device_drivers": [0],
+            "device_id": {"device_uuid": {"uuid": "MW1-2"}}, "device_type": "microwave-radio-system", "device_drivers": [5],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "192.168.27.139:10"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "192.168.27.140:8"}
-                ], "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
-                    "node_ids": ["192.168.27.139", "192.168.27.140"]
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8443"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
+                    "node_ids": ["172.18.0.1", "172.18.0.2"]
                 }}}
             ]}
         },
-
         {
-            "device_id": {"device_uuid": {"uuid": "R1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_id": {"device_uuid": {"uuid": "MW3-4"}}, "device_type": "microwave-radio-system", "device_drivers": [5],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
-                ]}}}
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8443"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
+                    "node_ids": ["172.18.0.3", "172.18.0.4"]
+                }}}
             ]}
         },
-
-
         {
-            "device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "device_type": "emu-optical-splitter", "device_drivers": [0],
+            "device_id": {"device_uuid": {"uuid": "OLS"}}, "device_type": "open-line-system", "device_drivers": [2],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "optical/internal", "uuid": "common"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf1"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf2"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf3"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf4"}
-                ]}}}
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "cttc-ols.cttc-ols.svc.cluster.local"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "4900"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"timeout": 120}}}
             ]}
         },
         {
-            "device_id": {"device_uuid": {"uuid": "XR-HUB"}}, "device_type": "emu-xr-hub", "device_drivers": [0],
+            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "2/1"}
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
                 ]}}}
             ]}
         },
-
         {
-            "device_id": {"device_uuid": {"uuid": "XR-LEAF1"}}, "device_type": "emu-xr-leaf", "device_drivers": [0],
+            "device_id": {"device_uuid": {"uuid": "R1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
                     {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "2/1"}
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/3"}
                 ]}}}
             ]}
         },
@@ -132,18 +81,6 @@
                 ]}}}
             ]}
         },
-
-        {
-            "device_id": {"device_uuid": {"uuid": "XR-LEAF2"}}, "device_type": "emu-xr-leaf", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "2/1"}
-                ]}}}
-            ]}
-        },
         {
             "device_id": {"device_uuid": {"uuid": "R3"}}, "device_type": "emu-packet-router", "device_drivers": [0],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
@@ -155,29 +92,6 @@
                 ]}}}
             ]}
         },
-
-        {
-            "device_id": {"device_uuid": {"uuid": "PE3"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "PE4"}}, "device_type": "emu-packet-router", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
-                ]}}}
-            ]}
-        },
         {
             "device_id": {"device_uuid": {"uuid": "DC2"}}, "device_type": "emu-datacenter", "device_drivers": [0],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
@@ -204,41 +118,71 @@
                 {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/1"}}
             ]
         },
-
         {
-            "link_id": {"link_uuid": {"uuid": "R1@D1/2==R2@D1/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R1@D1"}}, "endpoint_uuid": {"uuid": "2"}},
-                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "1"}}
+            "link_id": {"link_uuid": {"uuid": "PE1/1/2==MW1-2/172.18.0.1:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.1:1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "MW1-2/172.18.0.2:1==R1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.2:1"}},
+                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE2/1/2==MW3-4/172.18.0.3:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.3:1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "MW3-4/172.18.0.4:1==R1/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.4:1"}},
+                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/2"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "R2@D1/3==R3@D1/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "3"}},
-                {"device_id": {"device_uuid": {"uuid": "R3@D1"}}, "endpoint_uuid": {"uuid": "2"}}
+            "link_id": {"link_uuid": {"uuid": "R1/1/3==OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/3"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "aade6001-f00b-5e2f-a357-6a0a9d3de870"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "R2@D1/5==R5@D1/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R2@D1"}}, "endpoint_uuid": {"uuid": "5"}},
-                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "2"}}
+            "link_id": {"link_uuid": {"uuid": "OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513==R2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}},
+                {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec==R3/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}},
+                {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R2/1/2==PE3/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/1"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "R3@D1/4==R4@D1/3"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R3@D1"}}, "endpoint_uuid": {"uuid": "4"}},
-                {"device_id": {"device_uuid": {"uuid": "R4@D1"}}, "endpoint_uuid": {"uuid": "3"}}
+            "link_id": {"link_uuid": {"uuid": "R3/1/2==PE4/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/1"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "R4@D1/5==R5@D1/4"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R4@D1"}}, "endpoint_uuid": {"uuid": "5"}},
-                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "4"}}
+            "link_id": {"link_uuid": {"uuid": "PE3/1/2==DC2/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "R5@D1/1==R1@D1/5"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R5@D1"}}, "endpoint_uuid": {"uuid": "1"}},
-                {"device_id": {"device_uuid": {"uuid": "R1@D1"}}, "endpoint_uuid": {"uuid": "5"}}
+            "link_id": {"link_uuid": {"uuid": "PE4/1/2==DC2/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}}
             ]
         }
     ]
diff --git a/src/tests/ofc23/descriptors/descriptor_parent_l2vpn.json b/src/tests/ofc23/descriptors/descriptor_parent_l2vpn.json
deleted file mode 100644
index 1eb85eab1..000000000
--- a/src/tests/ofc23/descriptors/descriptor_parent_l2vpn.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-    "contexts": [
-        {"context_id": {"context_uuid": {"uuid": "admin"}}}
-    ],
-    "topologies": [
-        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
-    ],
-    "devices": [
-        {
-            "device_id": {"device_uuid": {"uuid": "TFS-IP"}}, "device_type": "teraflowsdn", "device_drivers": [7],
-            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8002"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
-                    "scheme": "http", "username": "admin", "password": "admin"
-                }}}
-            ]}
-        }
-    ]
-}
diff --git a/src/tests/ofc23/descriptors/idc-slice.json b/src/tests/ofc23/descriptors/idc-slice.json
deleted file mode 100644
index 634209284..000000000
--- a/src/tests/ofc23/descriptors/idc-slice.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-    "slices":[
-        {
-            "slice_id":{"context_id":{"context_uuid":{"uuid":"admin"}},"slice_uuid":{"uuid":"idc-slice"}},
-            "slice_endpoint_ids":[
-                {"device_id":{"device_uuid":{"uuid":"DC1"}},"endpoint_uuid":{"uuid":"int"}},
-                {"device_id":{"device_uuid":{"uuid":"DC2"}},"endpoint_uuid":{"uuid":"int"}}
-            ],
-            "slice_status":{"slice_status":1},
-            "slice_service_ids":[],
-            "slice_subslice_ids":[],
-            "slice_constraints":[],
-            "slice_config":{"config_rules":[
-                {"action":1,"custom":{"resource_key":"/settings","resource_value":"{}"}},
-                {"action":1,"custom":{"resource_key":"/device[DC1]/endpoint[int]/settings","resource_value":"{}"}},
-                {"action":1,"custom":{"resource_key":"/device[DC2]/endpoint[int]/settings","resource_value":"{}"}}
-            ]}
-        }
-    ]
-}
diff --git a/src/tests/ofc23/descriptors/splitter.json b/src/tests/ofc23/descriptors/splitter.json
new file mode 100644
index 000000000..680829e6e
--- /dev/null
+++ b/src/tests/ofc23/descriptors/splitter.json
@@ -0,0 +1,18 @@
+{
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "device_type": "emu-optical-splitter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "optical/internal", "uuid": "common"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf1"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf2"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf3"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf4"}
+                ]}}}
+            ]}
+        }
+    ]
+}
-- 
GitLab


From aa2579a6d2da88755fa3eb5d5251ca9e77734d9e Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 16:43:20 +0000
Subject: [PATCH 148/229] Device component- IETF L2VPN Driver:

- Added DebugAPI client used to acquire remote controller topology info
- Extended skeleton and preliminary implemented driver methods
- Extended WIM connector with a method to get a specific service
---
 .../drivers/ietf_l2vpn/IetfL2VpnDriver.py     | 98 +++++++++++--------
 .../drivers/ietf_l2vpn/TfsDebugApiClient.py   | 92 +++++++++++++++++
 .../ietf_l2vpn/WimconnectorIETFL2VPN.py       | 25 +++++
 3 files changed, 172 insertions(+), 43 deletions(-)
 create mode 100644 src/device/service/drivers/ietf_l2vpn/TfsDebugApiClient.py

diff --git a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
index 68b8090e5..2bcb64384 100644
--- a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
+++ b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
@@ -15,24 +15,30 @@
 import logging, threading
 from typing import Any, Iterator, List, Optional, Tuple, Union
 from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
+from common.tools.object_factory.Device import json_device_id
+from common.tools.object_factory.EndPoint import json_endpoint_id
 from common.type_checkers.Checkers import chk_string, chk_type
 from device.service.driver_api._Driver import _Driver, RESOURCE_ENDPOINTS, RESOURCE_SERVICES
+from device.service.drivers.ietf_l2vpn.TfsDebugApiClient import TfsDebugApiClient
 from .Tools import connection_point, find_key, wim_mapping
 from .WimconnectorIETFL2VPN import WimconnectorIETFL2VPN
 
 LOGGER = logging.getLogger(__name__)
 
-def process_endpoint(method : str, endpoint : Any) -> Any:
-    LOGGER.warning('[{:s}][process_endpoint] endpoint={:s}'.format(str(method), str(endpoint)))
-    return endpoint
+def process_connectivity_services(method : str, services : Any) -> Any:
+    LOGGER.warning('[{:s}][process_connectivity_services] services={:s}'.format(str(method), str(services)))
+    return services
 
 def process_connectivity_service(method : str, service : Any) -> Any:
     LOGGER.warning('[{:s}][process_connectivity_service] service={:s}'.format(str(method), str(service)))
     return service
 
-def service_exists(param : Any) -> bool:
-    LOGGER.warning('[service_exists] param={:s}'.format(str(param)))
-    return False
+def service_exists(wim : WimconnectorIETFL2VPN, service_uuid : str) -> bool:
+    try:
+        wim.get_connectivity_service_status(service_uuid)
+        return True
+    except: # pylint: disable=bare-except
+        return False
 
 ALL_RESOURCE_KEYS = [
     RESOURCE_ENDPOINTS,
@@ -55,6 +61,7 @@ class IetfL2VpnDriver(_Driver):
         wim_account = {'user': username, 'password': password}
         # Mapping updated dynamically with each request
         config = {'mapping_not_needed': False, 'service_endpoint_mapping': []}
+        self.dac = TfsDebugApiClient(address, int(port), scheme=scheme, username=username, password=password)
         self.wim = WimconnectorIETFL2VPN(wim, wim_account, config=config)
         self.conn_info = {} # internal database emulating OSM storage provided to WIM Connectors
 
@@ -88,20 +95,22 @@ class IetfL2VpnDriver(_Driver):
             if len(resource_keys) == 0: resource_keys = ALL_RESOURCE_KEYS
             for i, resource_key in enumerate(resource_keys):
                 str_resource_name = 'resource_key[#{:d}]'.format(i)
-                chk_string(str_resource_name, resource_key, allow_empty=False)
-
-                if resource_key == RESOURCE_ENDPOINTS:
-                    # return endpoints through debug-api and list-devices method
-                    endpoints = self.debug_api.get_endpoints()
-                    for endpoint in endpoints: results.append(process_endpoint('GetConfig', endpoint))
-                elif resource_key == RESOURCE_SERVICES:
-                    # return all services through 
-                    services = self.wim.get_all_active_connectivity_services()
-                    for service in services: results.append(process_connectivity_service('GetConfig', service))
-                else:
-                    # assume single-service retrieval
-                    service = self.wim.get_connectivity_service()
-                    results.append(process_connectivity_service('GetConfig', service))
+                try:
+                    chk_string(str_resource_name, resource_key, allow_empty=False)
+                    if resource_key == RESOURCE_ENDPOINTS:
+                        # return endpoints through debug-api and list-devices method
+                        results.extend(self.dac.get_devices_endpoints())
+                    elif resource_key == RESOURCE_SERVICES:
+                        # return all services through 
+                        reply = self.wim.get_all_active_connectivity_services()
+                        results.extend(process_connectivity_services('GetConfig', reply.json()))
+                    else:
+                        # assume single-service retrieval
+                        reply = self.wim.get_connectivity_service(resource_key)
+                        results.append(process_connectivity_service('GetConfig', reply.json()))
+                except Exception as e: # pylint: disable=broad-except
+                    LOGGER.exception('Unhandled error processing resource_key({:s})'.format(str(resource_key)))
+                    results.append((resource_key, e))
         return results
 
     @metered_subclass_method(METRICS_POOL)
@@ -114,32 +123,35 @@ class IetfL2VpnDriver(_Driver):
                 LOGGER.info('resource = {:s}'.format(str(resource)))
 
                 service_uuid = find_key(resource, 'uuid')
-                a_endpoint = find_key(resource, 'a_endpoint')
-                z_endpoint = find_key(resource, 'z_endpoint')
-                #capacity_value = find_key(resource, 'capacity_value')
-                #capacity_unit = find_key(resource, 'capacity_unit')
-                #layer_protocol_name = find_key(resource, 'layer_protocol_name')
-                #layer_protocol_qualifier = find_key(resource, 'layer_protocol_qualifier')
-                #direction = find_key(resource, 'direction')
-                encapsulation_type = find_key(resource, 'encapsulation_type')
-                vlan_id = find_key(resource, 'vlan_id')
 
-                conn_info = {}
+                if service_exists(self.wim, service_uuid):
+                    exc = NotImplementedError('IETF L2VPN Service Update is still not supported')
+                    results.append((resource[0], exc))
+                    continue
 
-                result = self.wim.get_connectivity_service_status(
-                    service_uuid, conn_info=conn_info)
+                src_device_uuid   = find_key(resource, 'src_device_uuid')
+                src_endpoint_uuid = find_key(resource, 'src_endpoint_uuid')
+                dst_device_uuid   = find_key(resource, 'dst_device_uuid')
+                dst_endpoint_uuid = find_key(resource, 'dst_endpoint_uuid')
+                encap_type        = find_key(resource, 'encapsulation_type')
+                vlan_id           = find_key(resource, 'vlan_id')
+
+                src_endpoint_id = json_endpoint_id(json_device_id(src_device_uuid), src_endpoint_uuid)
+                src_service_endpoint_id, src_mapping = wim_mapping('1', src_endpoint_id)
+                self.wim.mappings[src_service_endpoint_id] = src_mapping
+
+                dst_endpoint_id = json_endpoint_id(json_device_id(dst_device_uuid), dst_endpoint_uuid)
+                dst_service_endpoint_id, dst_mapping = wim_mapping('2', dst_endpoint_id)
+                self.wim.mappings[dst_service_endpoint_id] = dst_mapping
+
+                connection_points = [
+                    connection_point(src_service_endpoint_id, encap_type, vlan_id),
+                    connection_point(dst_service_endpoint_id, encap_type, vlan_id),
+                ]
+
+                result = self.wim.create_connectivity_service(SERVICE_TYPE, connection_points)
+                LOGGER.info('[SetConfig] CREATE result={:s}'.format(str(result)))
 
-                connection_points = []
-                for endpoint_id in [a_endpoint, z_endpoint]:
-                    site_id = str(endpoint_id)
-                    self.wim.mappings[endpoint_id] = wim_mapping(site_id, endpoint_id)
-                    connection_points.append(connection_point(endpoint_id, encapsulation_type, vlan_id))
-                if service_exists(result):
-                    result = self.wim.create_connectivity_service(
-                        SERVICE_TYPE, connection_points)
-                else:
-                    self.wim.edit_connectivity_service(
-                        service_uuid, conn_info=conn_info, connection_points=connection_points)
                 results.extend(process_connectivity_service('SetConfig', None))
         return results
 
diff --git a/src/device/service/drivers/ietf_l2vpn/TfsDebugApiClient.py b/src/device/service/drivers/ietf_l2vpn/TfsDebugApiClient.py
new file mode 100644
index 000000000..f8c4e0d94
--- /dev/null
+++ b/src/device/service/drivers/ietf_l2vpn/TfsDebugApiClient.py
@@ -0,0 +1,92 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging, requests
+from requests.auth import HTTPBasicAuth
+from typing import Dict, List, Optional
+
+GET_DEVICES_URL = '{:s}://{:s}:{:d}/restconf/debug-api/devices'
+TIMEOUT = 30
+
+HTTP_OK_CODES = {
+    200,    # OK
+    201,    # Created
+    202,    # Accepted
+    204,    # No Content
+}
+
+MAPPING_STATUS = {
+    'DEVICEOPERATIONALSTATUS_UNDEFINED': 0,
+    'DEVICEOPERATIONALSTATUS_DISABLED' : 1,
+    'DEVICEOPERATIONALSTATUS_ENABLED'  : 2,
+}
+
+MAPPING_DRIVER = {
+    'DEVICEDRIVER_UNDEFINED'            : 0,
+    'DEVICEDRIVER_OPENCONFIG'           : 1,
+    'DEVICEDRIVER_TRANSPORT_API'        : 2,
+    'DEVICEDRIVER_P4'                   : 3,
+    'DEVICEDRIVER_IETF_NETWORK_TOPOLOGY': 4,
+    'DEVICEDRIVER_ONF_TR_352'           : 5,
+    'DEVICEDRIVER_XR'                   : 6,
+    'DEVICEDRIVER_IETF_L2VPN'           : 7,
+}
+
+MSG_ERROR = 'Could not retrieve devices in remote TeraFlowSDN instance({:s}). status_code={:s} reply={:s}'
+
+LOGGER = logging.getLogger(__name__)
+
+class TfsDebugApiClient:
+    def __init__(
+        self, address : str, port : int, scheme : str = 'http',
+        username : Optional[str] = None, password : Optional[str] = None
+    ) -> None:
+        self._url = GET_DEVICES_URL.format(scheme, address, port)
+        self._auth = HTTPBasicAuth(username, password) if username is not None and password is not None else None
+
+    def get_devices_endpoints(self) -> List[Dict]:
+        reply = requests.get(self._url, timeout=TIMEOUT, verify=False, auth=self._auth)
+        if reply.status_code not in HTTP_OK_CODES:
+            msg = MSG_ERROR.format(str(self._url), str(reply.status_code), str(reply))
+            LOGGER.error(msg)
+            raise Exception(msg)
+
+        result = list()
+        for json_device in reply.json()['devices']:
+            device_uuid : str = json_device['device_id']['device_uuid']['uuid']
+            device_type : str = json_device['device_type']
+            if not device_type.startswith('emu-'): device_type = 'emu-' + device_type
+            device_status = json_device['device_operational_status']
+            device_url = '/devices/device[{:s}]'.format(device_uuid)
+            device_data = {
+                'uuid': json_device['device_id']['device_uuid']['uuid'],
+                'name': json_device['name'],
+                'type': device_type,
+                'status': MAPPING_STATUS[device_status],
+                'drivers': [MAPPING_DRIVER[driver] for driver in json_device['device_drivers']],
+            }
+            result.append((device_url, device_data))
+
+            for json_endpoint in json_device['device_endpoints']:
+                endpoint_uuid = json_endpoint['endpoint_id']['endpoint_uuid']['uuid']
+                endpoint_url = '/endpoints/endpoint[{:s}]'.format(endpoint_uuid)
+                endpoint_data = {
+                    'device_uuid': device_uuid,
+                    'uuid': endpoint_uuid,
+                    'name': json_endpoint['name'],
+                    'type': json_endpoint['endpoint_type'],
+                }
+                result.append((endpoint_url, endpoint_data))
+
+        return result
diff --git a/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py b/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
index b3721b2d5..960256cd0 100644
--- a/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
+++ b/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
@@ -541,3 +541,28 @@ class WimconnectorIETFL2VPN(SdnConnectorBase):
             return response
         except requests.exceptions.ConnectionError:
             raise SdnConnectorError("Request Timeout", http_code=408)
+
+    def get_connectivity_service(self, service_uuid, conn_info=None):
+        """Provide information about a specific connection provisioned by a WIM.
+
+        This method should receive as the first argument the UUID generated by
+        the ``create_connectivity_service``
+        """
+        try:
+            self.logger.info("Sending get connectivity service")
+            servicepoint = (
+                "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services/vpn-service={}/".format(
+                    self.wim["wim_url"], service_uuid
+                )
+            )
+            response = requests.get(servicepoint, auth=self.auth)
+
+            if response.status_code != requests.codes.ok:
+                raise SdnConnectorError(
+                    "Unable to get connectivity service {:s}".format(str(service_uuid)),
+                    http_code=response.status_code,
+                )
+
+            return response
+        except requests.exceptions.ConnectionError:
+            raise SdnConnectorError("Request Timeout", http_code=408)
-- 
GitLab


From 427944404dd56f989cef5fb475aeea1f5e8f05f9 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 16:44:13 +0000
Subject: [PATCH 149/229] Device component - Microwave Driver:

- Added logic to retrieve configured services
---
 src/device/service/drivers/microwave/Tools.py | 34 +++++++++++++++++--
 1 file changed, 32 insertions(+), 2 deletions(-)

diff --git a/src/device/service/drivers/microwave/Tools.py b/src/device/service/drivers/microwave/Tools.py
index 711fb55fd..6245ff0af 100644
--- a/src/device/service/drivers/microwave/Tools.py
+++ b/src/device/service/drivers/microwave/Tools.py
@@ -14,7 +14,7 @@
 
 import json, logging, requests
 from requests.auth import HTTPBasicAuth
-from typing import Optional, Set
+from typing import Dict, Optional, Set
 from device.service.driver_api._Driver import RESOURCE_ENDPOINTS
 
 LOGGER = logging.getLogger(__name__)
@@ -43,6 +43,14 @@ def is_exportable_endpoint(node, termination_point_id, links):
             return False
     return True
 
+VLAN_CLASSIFICATION_TYPES = {'ietf-eth-tran-types:vlan-classification', 'vlan-classification'}
+OUTER_TAG_C_TYPE = {'ietf-eth-tran-types:classify-c-vlan', 'classify-c-vlan'}
+def get_vlan_outer_tag(endpoint : Dict) -> Optional[int]:
+    if endpoint.get('service-classification-type', '') not in VLAN_CLASSIFICATION_TYPES: return None
+    outer_tag = endpoint.get('outer-tag', {})
+    if outer_tag.get('tag-type', '') not in OUTER_TAG_C_TYPE: return None
+    return outer_tag.get('vlan-value')
+
 def config_getter(
     root_url : str, resource_key : str, auth : Optional[HTTPBasicAuth] = None, timeout : Optional[int] = None,
     node_ids : Set[str] = set()
@@ -92,7 +100,29 @@ def config_getter(
             for service in service_instances:
                 service_name = service['etht-svc-name']
                 resource_key = '/services/service[{:s}]'.format(service_name)
-                result.append((resource_key, service))
+                resource_value = {'uuid': service.get('etht-svc-name', '<UNDEFINED>')}
+
+                for endpoint in service.get('etht-svc-end-points', []):
+                    _vlan_id = get_vlan_outer_tag(endpoint)
+                    if _vlan_id is not None:
+                        vlan_id = resource_value.get('vlan_id')
+                        if vlan_id is None:
+                            resource_value['vlan_id'] = _vlan_id
+                        elif vlan_id != _vlan_id:
+                            raise Exception('Incompatible VLAN Ids: {:s}'.format(str(service)))
+                    access_points = endpoint.get('etht-svc-access-points', [])
+                    for access_point in access_points:
+                        if access_point['access-point-id'] == '1':
+                            resource_value['node_id_src'] = access_point['access-node-id']
+                            resource_value['tp_id_src']   = access_point['access-ltp-id']
+                        elif access_point['access-point-id'] == '2':
+                            resource_value['node_id_dst'] = access_point['access-node-id']
+                            resource_value['tp_id_dst']   = access_point['access-ltp-id']
+
+                if len(node_ids) > 0 and resource_value['node_id_src'] not in node_ids: continue
+                if len(node_ids) > 0 and resource_value['node_id_dst'] not in node_ids: continue
+
+                result.append((resource_key, resource_value))
         except requests.exceptions.Timeout:
             LOGGER.exception('Timeout connecting {:s}'.format(url))
         except Exception as e:  # pylint: disable=broad-except
-- 
GitLab


From 4d9fa4cf57ffd321857786134439d93be9c4da07 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 16:44:32 +0000
Subject: [PATCH 150/229] Device component - TAPI Driver:

- Added logic to retrieve configured services
---
 .../service/drivers/transport_api/Tools.py    | 91 ++++++++++++++-----
 .../service/drivers/transport_api/__init__.py | 11 +--
 2 files changed, 71 insertions(+), 31 deletions(-)

diff --git a/src/device/service/drivers/transport_api/Tools.py b/src/device/service/drivers/transport_api/Tools.py
index 4943648dc..bbd4247f0 100644
--- a/src/device/service/drivers/transport_api/Tools.py
+++ b/src/device/service/drivers/transport_api/Tools.py
@@ -15,7 +15,7 @@
 import json, logging, operator, requests
 from requests.auth import HTTPBasicAuth
 from typing import Optional
-from device.service.driver_api._Driver import RESOURCE_ENDPOINTS
+from device.service.driver_api._Driver import RESOURCE_ENDPOINTS, RESOURCE_SERVICES
 
 LOGGER = logging.getLogger(__name__)
 
@@ -52,27 +52,74 @@ def config_getter(
         result.append((resource_key, e))
         return result
 
-    if resource_key != RESOURCE_ENDPOINTS: return result
-
-    if 'tapi-common:context' in context:
-        context = context['tapi-common:context']
-    elif 'context' in context:
-        context = context['context']
-
-    for sip in context['service-interface-point']:
-        layer_protocol_name = sip.get('layer-protocol-name', '?')
-        supportable_spectrum = sip.get('tapi-photonic-media:media-channel-service-interface-point-spec', {})
-        supportable_spectrum = supportable_spectrum.get('mc-pool', {})
-        supportable_spectrum = supportable_spectrum.get('supportable-spectrum', [])
-        supportable_spectrum = supportable_spectrum[0] if len(supportable_spectrum) == 1 else {}
-        grid_type = supportable_spectrum.get('frequency-constraint', {}).get('grid-type')
-        granularity = supportable_spectrum.get('frequency-constraint', {}).get('adjustment-granularity')
-        direction = sip.get('direction', '?')
-        endpoint_type = [layer_protocol_name, grid_type, granularity, direction]
-        str_endpoint_type = ':'.join(filter(lambda i: operator.is_not(i, None), endpoint_type))
-        endpoint_url = '/endpoints/endpoint[{:s}]'.format(sip['uuid'])
-        endpoint_data = {'uuid': sip['uuid'], 'type': str_endpoint_type}
-        result.append((endpoint_url, endpoint_data))
+    if resource_key == RESOURCE_ENDPOINTS:
+        if 'tapi-common:context' in context:
+            context = context['tapi-common:context']
+        elif 'context' in context:
+            context = context['context']
+
+        for sip in context['service-interface-point']:
+            layer_protocol_name = sip.get('layer-protocol-name', '?')
+            supportable_spectrum = sip.get('tapi-photonic-media:media-channel-service-interface-point-spec', {})
+            supportable_spectrum = supportable_spectrum.get('mc-pool', {})
+            supportable_spectrum = supportable_spectrum.get('supportable-spectrum', [])
+            supportable_spectrum = supportable_spectrum[0] if len(supportable_spectrum) == 1 else {}
+            grid_type = supportable_spectrum.get('frequency-constraint', {}).get('grid-type')
+            granularity = supportable_spectrum.get('frequency-constraint', {}).get('adjustment-granularity')
+            direction = sip.get('direction', '?')
+
+            endpoint_type = [layer_protocol_name, grid_type, granularity, direction]
+            str_endpoint_type = ':'.join(filter(lambda i: operator.is_not(i, None), endpoint_type))
+            sip_uuid = sip['uuid']
+
+            sip_names = sip.get('name', [])
+            sip_name = next(iter([
+                sip_name['value']
+                for sip_name in sip_names
+                if sip_name['value-name'] == 'local-name'
+            ]), sip_uuid)
+
+            endpoint_url = '/endpoints/endpoint[{:s}]'.format(sip_uuid)
+            endpoint_data = {'uuid': sip_uuid, 'name': sip_name, 'type': str_endpoint_type}
+            result.append((endpoint_url, endpoint_data))
+
+    elif resource_key == RESOURCE_SERVICES:
+        if 'tapi-common:context' in context:
+            context = context['tapi-common:context']
+        elif 'context' in context:
+            context = context['context']
+
+        if 'tapi-connectivity:connectivity-context' in context:
+            context = context['tapi-connectivity:connectivity-context']
+        elif 'connectivity-context' in context:
+            context = context['connectivity-context']
+
+        for conn_svc in context['connectivity-service']:
+            service_uuid = conn_svc['uuid']
+            constraints = conn_svc.get('connectivity-constraint', {})
+            total_req_cap = constraints.get('requested-capacity', {}).get('total-size', {})
+
+            service_url = '/services/service[{:s}]'.format(service_uuid)
+            service_data = {
+                'uuid': service_uuid,
+                'direction': constraints.get('connectivity-direction', 'UNIDIRECTIONAL'),
+                'capacity_unit': total_req_cap.get('unit', '<UNDEFINED>'),
+                'capacity_value': total_req_cap.get('value', '<UNDEFINED>'),
+            }
+
+            for i,endpoint in enumerate(conn_svc.get('end-point', [])):
+                layer_protocol_name = endpoint.get('layer-protocol-name')
+                if layer_protocol_name is not None:
+                    service_data['layer_protocol_name'] = layer_protocol_name
+
+                layer_protocol_qualifier = endpoint.get('layer-protocol-qualifier')
+                if layer_protocol_qualifier is not None:
+                    service_data['layer_protocol_qualifier'] = layer_protocol_qualifier
+
+                sip = endpoint['service-interface-point']['service-interface-point-uuid']
+                service_data['input_sip' if i == 0 else 'output_sip'] = sip
+
+            result.append((service_url, service_data))
 
     return result
 
diff --git a/src/device/service/drivers/transport_api/__init__.py b/src/device/service/drivers/transport_api/__init__.py
index 2d3f6df32..d5073c330 100644
--- a/src/device/service/drivers/transport_api/__init__.py
+++ b/src/device/service/drivers/transport_api/__init__.py
@@ -12,16 +12,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from device.service.driver_api._Driver import RESOURCE_ENDPOINTS, RESOURCE_INTERFACES, RESOURCE_NETWORK_INSTANCES
+from device.service.driver_api._Driver import RESOURCE_ENDPOINTS, RESOURCE_SERVICES
 
 ALL_RESOURCE_KEYS = [
     RESOURCE_ENDPOINTS,
-    RESOURCE_INTERFACES,
-    RESOURCE_NETWORK_INSTANCES,
+    RESOURCE_SERVICES,
 ]
-
-RESOURCE_KEY_MAPPINGS = {
-    RESOURCE_ENDPOINTS        : 'component',
-    RESOURCE_INTERFACES       : 'interface',
-    RESOURCE_NETWORK_INSTANCES: 'network_instance',
-}
-- 
GitLab


From efed73e32ce34b9c8dda27999afbc99b2d93cda7 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 16:45:52 +0000
Subject: [PATCH 151/229] Device component:

- Added logic to retrieve sub-devices and its endpoints from remote controllers
- Added logic to retrieve remote links connecting sub-devices
- Added logic to handle device managers, i.e., controllers
---
 .../service/DeviceServiceServicerImpl.py      |  28 +++-
 src/device/service/ErrorMessages.py           |   5 +-
 src/device/service/Tools.py                   | 144 +++++++++++++++---
 3 files changed, 151 insertions(+), 26 deletions(-)

diff --git a/src/device/service/DeviceServiceServicerImpl.py b/src/device/service/DeviceServiceServicerImpl.py
index be40e64ec..b89766b29 100644
--- a/src/device/service/DeviceServiceServicerImpl.py
+++ b/src/device/service/DeviceServiceServicerImpl.py
@@ -12,11 +12,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from typing import Dict
 import grpc, logging
 from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_method
 from common.method_wrappers.ServiceExceptions import NotFoundException, OperationFailedException
 from common.proto.context_pb2 import (
-    Device, DeviceConfig, DeviceDriverEnum, DeviceId, DeviceOperationalStatusEnum, Empty)
+    Device, DeviceConfig, DeviceDriverEnum, DeviceId, DeviceOperationalStatusEnum, Empty, Link)
 from common.proto.device_pb2 import MonitoringSettings
 from common.proto.device_pb2_grpc import DeviceServiceServicer
 from common.tools.context_queries.Device import get_device
@@ -27,7 +28,7 @@ from .driver_api.DriverInstanceCache import DriverInstanceCache, get_driver
 from .monitoring.MonitoringLoops import MonitoringLoops
 from .ErrorMessages import ERROR_MISSING_DRIVER, ERROR_MISSING_KPI
 from .Tools import (
-    check_connect_rules, check_no_endpoints, compute_rules_to_add_delete, configure_rules, deconfigure_rules,
+    check_connect_rules, check_no_endpoints, compute_rules_to_add_delete, configure_rules, deconfigure_rules, get_device_manager_uuid,
     populate_config_rules, populate_endpoint_monitoring_resources, populate_endpoints, populate_initial_config_rules,
     subscribe_kpi, unsubscribe_kpi, update_endpoints)
 
@@ -73,9 +74,16 @@ class DeviceServiceServicerImpl(DeviceServiceServicer):
 
             errors = []
 
+            # Sub-devices and sub-links are exposed by intermediate controllers or represent mgmt links.
+            # They are used to assist in path computation algorithms, and/or to identify dependencies
+            # (which controller is in charge of which sub-device).
+            new_sub_devices : Dict[str, Device] = dict()
+            new_sub_links : Dict[str, Link] = dict()
+
             if len(device.device_endpoints) == 0:
                 # created from request, populate endpoints using driver
-                errors.extend(populate_endpoints(device, driver, self.monitoring_loops))
+                errors.extend(populate_endpoints(
+                    device, driver, self.monitoring_loops, new_sub_devices, new_sub_links))
 
             if len(device.device_config.config_rules) == len(connection_config_rules):
                 # created from request, populate config rules using driver
@@ -87,12 +95,20 @@ class DeviceServiceServicerImpl(DeviceServiceServicer):
                 for error in errors: LOGGER.error(error)
                 raise OperationFailedException('AddDevice', extra_details=errors)
 
+            device.device_operational_status = DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED
             device_id = context_client.SetDevice(device)
 
+            for sub_device in new_sub_devices.values():
+                context_client.SetDevice(sub_device)
+
+            for sub_links in new_sub_links.values():
+                context_client.SetLink(sub_links)
+
             # Update endpoint monitoring resources with UUIDs
             device_with_uuids = context_client.GetDevice(device_id)
             populate_endpoint_monitoring_resources(device_with_uuids, self.monitoring_loops)
 
+            context_client.close()
             return device_id
         finally:
             self.mutex_queues.signal_done(device_uuid)
@@ -109,6 +125,12 @@ class DeviceServiceServicerImpl(DeviceServiceServicer):
             if device is None:
                 raise NotFoundException('Device', device_uuid, extra_details='loading in ConfigureDevice')
 
+            device_manager_uuid = get_device_manager_uuid(device)
+            if device_manager_uuid is not None:
+                device = get_device(context_client, device_manager_uuid, rw_copy=True)
+                if device is None:
+                    raise NotFoundException('Device', device_manager_uuid, extra_details='loading in ConfigureDevice')
+
             driver : _Driver = get_driver(self.driver_instance_cache, device)
             if driver is None:
                 msg = ERROR_MISSING_DRIVER.format(device_uuid=str(device_uuid))
diff --git a/src/device/service/ErrorMessages.py b/src/device/service/ErrorMessages.py
index 1fbea721f..bb7702e4e 100644
--- a/src/device/service/ErrorMessages.py
+++ b/src/device/service/ErrorMessages.py
@@ -14,9 +14,9 @@
 
 _DEVICE_ID          = 'DeviceId({device_uuid:s})'
 _ENDPOINT_ID        = 'EndpointId({endpoint_uuid:s})'
-_ENDPOINT_DATA      = 'EndpointId({endpoint_data:s})'
 _KPI                = 'Kpi({kpi_uuid:s})'
 _DEVICE_ENDPOINT_ID = _DEVICE_ID + '/' + _ENDPOINT_ID
+_RESOURCE           = 'Resource({resource_data:s})'
 _RESOURCE_KEY       = 'Resource(key={resource_key:s})'
 _RESOURCE_KEY_VALUE = 'Resource(key={resource_key:s}, value={resource_value:s})'
 _SUBSCRIPTION       = 'Subscription(key={subscr_key:s}, duration={subscr_duration:s}, interval={subscr_interval:s})'
@@ -26,7 +26,8 @@ _ERROR              = 'Error({error:s})'
 ERROR_MISSING_DRIVER = _DEVICE_ID + ' has not been added to this Device instance'
 ERROR_MISSING_KPI    = _KPI + ' not found'
 
-ERROR_BAD_ENDPOINT   = _DEVICE_ID + ': GetConfig retrieved malformed ' + _ENDPOINT_DATA
+ERROR_BAD_RESOURCE   = _DEVICE_ID + ': GetConfig retrieved malformed ' + _RESOURCE
+ERROR_UNSUP_RESOURCE = _DEVICE_ID + ': GetConfig retrieved unsupported ' + _RESOURCE
 
 ERROR_GET            = _DEVICE_ID + ': Unable to Get ' + _RESOURCE_KEY + '; ' + _ERROR
 ERROR_GET_INIT       = _DEVICE_ID + ': Unable to Get Initial ' + _RESOURCE_KEY + '; ' + _ERROR
diff --git a/src/device/service/Tools.py b/src/device/service/Tools.py
index 571e8acda..1dccea3ab 100644
--- a/src/device/service/Tools.py
+++ b/src/device/service/Tools.py
@@ -13,19 +13,20 @@
 # limitations under the License.
 
 import json, logging
-from typing import Any, Dict, List, Tuple, Union
+from typing import Any, Dict, List, Optional, Tuple, Union
 from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
 from common.method_wrappers.ServiceExceptions import InvalidArgumentException
-from common.proto.context_pb2 import ConfigActionEnum, Device, DeviceConfig
+from common.proto.context_pb2 import ConfigActionEnum, Device, DeviceConfig, Link
 from common.proto.device_pb2 import MonitoringSettings
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
 from common.tools.grpc.ConfigRules import update_config_rule_custom
 from common.tools.grpc.Tools import grpc_message_to_json
+from context.client.ContextClient import ContextClient
 from .driver_api._Driver import _Driver, RESOURCE_ENDPOINTS
 from .monitoring.MonitoringLoops import MonitoringLoops
 from .ErrorMessages import (
-    ERROR_BAD_ENDPOINT, ERROR_DELETE, ERROR_GET, ERROR_GET_INIT, ERROR_MISSING_KPI, ERROR_SAMPLETYPE, ERROR_SET,
-    ERROR_SUBSCRIBE, ERROR_UNSUBSCRIBE
+    ERROR_BAD_RESOURCE, ERROR_DELETE, ERROR_GET, ERROR_GET_INIT, ERROR_MISSING_KPI, ERROR_SAMPLETYPE, ERROR_SET,
+    ERROR_SUBSCRIBE, ERROR_UNSUBSCRIBE, ERROR_UNSUP_RESOURCE
 )
 
 LOGGER = logging.getLogger(__name__)
@@ -77,19 +78,51 @@ def check_no_endpoints(device_endpoints) -> None:
         extra_details='RPC method AddDevice does not accept Endpoints. Endpoints are discovered through '\
                         'interrogation of the physical device.')
 
-def populate_endpoints(device : Device, driver : _Driver, monitoring_loops : MonitoringLoops) -> List[str]:
+def get_device_manager_uuid(device : Device) -> Optional[str]:
+    for config_rule in device.device_config.config_rules:
+        if config_rule.WhichOneof('config_rule') != 'custom': continue
+        if config_rule.custom.resource_key != '_manager': continue
+        device_manager_id = json.loads(config_rule.custom.resource_value)
+        return device_manager_id['uuid']
+    return None
+
+def populate_endpoints(
+    device : Device, driver : _Driver, monitoring_loops : MonitoringLoops,
+    new_sub_devices : Dict[str, Device], new_sub_links : Dict[str, Link]
+) -> List[str]:
     device_uuid = device.device_id.device_uuid.uuid
+    device_name = device.name
 
     resources_to_get = [RESOURCE_ENDPOINTS]
     results_getconfig = driver.GetConfig(resources_to_get)
+    LOGGER.debug('results_getconfig = {:s}'.format(str(results_getconfig)))
+
+    # first quick pass to identify need of mgmt endpoints and links
+    add_mgmt_port = False
+    for resource_data in results_getconfig:
+        if len(resource_data) != 2: continue
+        resource_key, _ = resource_data
+        if resource_key.startswith('/devices/device'):
+            add_mgmt_port = True
+            break
+
+    if add_mgmt_port:
+        # add mgmt port to main device
+        device_mgmt_endpoint = device.device_endpoints.add()
+        device_mgmt_endpoint.endpoint_id.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
+        device_mgmt_endpoint.endpoint_id.topology_id.topology_uuid.uuid = DEFAULT_TOPOLOGY_NAME
+        device_mgmt_endpoint.endpoint_id.device_id.device_uuid.uuid = device_uuid
+        device_mgmt_endpoint.endpoint_id.endpoint_uuid.uuid = 'mgmt'
+        device_mgmt_endpoint.name = 'mgmt'
+        device_mgmt_endpoint.endpoint_type = 'mgmt'
 
     errors : List[str] = list()
-    for endpoint in results_getconfig:
-        if len(endpoint) != 2:
-            errors.append(ERROR_BAD_ENDPOINT.format(device_uuid=device_uuid, endpoint_data=str(endpoint)))
+    for resource_data in results_getconfig:
+        if len(resource_data) != 2:
+            errors.append(ERROR_BAD_RESOURCE.format(device_uuid=device_uuid, resource_data=str(resource_data)))
             continue
 
-        resource_key, resource_value = endpoint
+        resource_key, resource_value = resource_data
         if isinstance(resource_value, Exception):
             errors.append(ERROR_GET.format(
                 device_uuid=device_uuid, resource_key=str(resource_key), error=str(resource_value)))
@@ -97,19 +130,88 @@ def populate_endpoints(device : Device, driver : _Driver, monitoring_loops : Mon
         if resource_value is None:
             continue
 
-        endpoint_uuid = resource_value.get('uuid')
-
-        device_endpoint = device.device_endpoints.add()
-        device_endpoint.endpoint_id.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
-        device_endpoint.endpoint_id.topology_id.topology_uuid.uuid = DEFAULT_TOPOLOGY_NAME
-        device_endpoint.endpoint_id.device_id.device_uuid.uuid = device_uuid
-        device_endpoint.endpoint_id.endpoint_uuid.uuid = endpoint_uuid
-        device_endpoint.endpoint_type = resource_value.get('type')
+        if resource_key.startswith('/devices/device'):
+            # create sub-device
+            _sub_device_uuid = resource_value['uuid']
+            _sub_device = Device()
+            _sub_device.device_id.device_uuid.uuid = _sub_device_uuid           # pylint: disable=no-member
+            _sub_device.name = resource_value['name']
+            _sub_device.device_type = resource_value['type']
+            _sub_device.device_operational_status = resource_value['status']
+            
+            # Sub-devices should not have a driver assigned. Instead, they should have
+            # a config rule specifying their manager.
+            #_sub_device.device_drivers.extend(resource_value['drivers'])        # pylint: disable=no-member
+            manager_config_rule = _sub_device.device_config.config_rules.add()
+            manager_config_rule.action = ConfigActionEnum.CONFIGACTION_SET
+            manager_config_rule.custom.resource_key = '_manager'
+            manager = {'uuid': device_uuid, 'name': device_name}
+            manager_config_rule.custom.resource_value = json.dumps(manager, indent=0, sort_keys=True)
+
+            new_sub_devices[_sub_device_uuid] = _sub_device
+
+            # add mgmt port to sub-device
+            _sub_device_mgmt_endpoint = _sub_device.device_endpoints.add()      # pylint: disable=no-member
+            _sub_device_mgmt_endpoint.endpoint_id.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
+            _sub_device_mgmt_endpoint.endpoint_id.topology_id.topology_uuid.uuid = DEFAULT_TOPOLOGY_NAME
+            _sub_device_mgmt_endpoint.endpoint_id.device_id.device_uuid.uuid = _sub_device_uuid
+            _sub_device_mgmt_endpoint.endpoint_id.endpoint_uuid.uuid = 'mgmt'
+            _sub_device_mgmt_endpoint.name = 'mgmt'
+            _sub_device_mgmt_endpoint.endpoint_type = 'mgmt'
+
+            # add mgmt link
+            _mgmt_link_uuid = '{:s}/{:s}=={:s}/{:s}'.format(device_name, 'mgmt', _sub_device.name, 'mgmt')
+            _mgmt_link = Link()
+            _mgmt_link.link_id.link_uuid.uuid = _mgmt_link_uuid                         # pylint: disable=no-member
+            _mgmt_link.name = _mgmt_link_uuid
+            _mgmt_link.link_endpoint_ids.append(device_mgmt_endpoint.endpoint_id)       # pylint: disable=no-member
+            _mgmt_link.link_endpoint_ids.append(_sub_device_mgmt_endpoint.endpoint_id)  # pylint: disable=no-member
+            new_sub_links[_mgmt_link_uuid] = _mgmt_link
+
+        elif resource_key.startswith('/endpoints/endpoint'):
+            endpoint_uuid = resource_value['uuid']
+            _device_uuid = resource_value.get('device_uuid')
+            endpoint_name = resource_value.get('name')
+
+            if _device_uuid is None:
+                # add endpoint to current device
+                device_endpoint = device.device_endpoints.add()
+                device_endpoint.endpoint_id.device_id.device_uuid.uuid = device_uuid
+            else:
+                # add endpoint to specified device
+                device_endpoint = new_sub_devices[_device_uuid].device_endpoints.add()
+                device_endpoint.endpoint_id.device_id.device_uuid.uuid = _device_uuid
+
+            device_endpoint.endpoint_id.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
+            device_endpoint.endpoint_id.topology_id.topology_uuid.uuid = DEFAULT_TOPOLOGY_NAME
+            
+            device_endpoint.endpoint_id.endpoint_uuid.uuid = endpoint_uuid
+            if endpoint_name is not None: device_endpoint.name = endpoint_name
+            device_endpoint.endpoint_type = resource_value.get('type', '-')
+
+            sample_types : Dict[int, str] = resource_value.get('sample_types', {})
+            for kpi_sample_type, monitor_resource_key in sample_types.items():
+                device_endpoint.kpi_sample_types.append(kpi_sample_type)
+                monitoring_loops.add_resource_key(device_uuid, endpoint_uuid, kpi_sample_type, monitor_resource_key)
+
+        elif resource_key.startswith('/links/link'):
+            # create sub-link
+            _sub_link_uuid = resource_value['uuid']
+            _sub_link = Link()
+            _sub_link.link_id.link_uuid.uuid = _sub_link_uuid           # pylint: disable=no-member
+            _sub_link.name = resource_value['name']
+            new_sub_links[_sub_link_uuid] = _sub_link
+
+            for device_uuid,endpoint_uuid in resource_value['name']:
+                _sub_link_endpoint_id = _sub_link.link_endpoint_ids.add()      # pylint: disable=no-member
+                _sub_link_endpoint_id.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
+                _sub_link_endpoint_id.topology_id.topology_uuid.uuid = DEFAULT_TOPOLOGY_NAME
+                _sub_link_endpoint_id.device_id.device_uuid.uuid = device_uuid
+                _sub_link_endpoint_id.endpoint_uuid.uuid = endpoint_uuid
 
-        sample_types : Dict[int, str] = resource_value.get('sample_types', {})
-        for kpi_sample_type, monitor_resource_key in sample_types.items():
-            device_endpoint.kpi_sample_types.append(kpi_sample_type)
-            monitoring_loops.add_resource_key(device_uuid, endpoint_uuid, kpi_sample_type, monitor_resource_key)
+        else:
+            errors.append(ERROR_UNSUP_RESOURCE.format(device_uuid=device_uuid, resource_data=str(resource_data)))
+            continue
 
     return errors
 
-- 
GitLab


From 1731c04e26b92f93400f4ba57d84eb5c1f11d1ee Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 16:46:24 +0000
Subject: [PATCH 152/229] Context component:

- Added logic to keep order of link endpoints
---
 src/context/service/database/Link.py             |  3 ++-
 src/context/service/database/models/LinkModel.py | 10 ++++++++--
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/context/service/database/Link.py b/src/context/service/database/Link.py
index 8d195cb1d..299827dbd 100644
--- a/src/context/service/database/Link.py
+++ b/src/context/service/database/Link.py
@@ -64,13 +64,14 @@ def link_set(db_engine : Engine, request : Link) -> Tuple[Dict, bool]:
     topology_uuids : Set[str] = set()
     related_topologies : List[Dict] = list()
     link_endpoints_data : List[Dict] = list()
-    for endpoint_id in request.link_endpoint_ids:
+    for i,endpoint_id in enumerate(request.link_endpoint_ids):
         endpoint_topology_uuid, _, endpoint_uuid = endpoint_get_uuid(
             endpoint_id, allow_random=False)
 
         link_endpoints_data.append({
             'link_uuid'    : link_uuid,
             'endpoint_uuid': endpoint_uuid,
+            'position'     : i,
         })
 
         if endpoint_topology_uuid not in topology_uuids:
diff --git a/src/context/service/database/models/LinkModel.py b/src/context/service/database/models/LinkModel.py
index ee591f5c8..e9fd9bc87 100644
--- a/src/context/service/database/models/LinkModel.py
+++ b/src/context/service/database/models/LinkModel.py
@@ -12,7 +12,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from sqlalchemy import Column, DateTime, ForeignKey, String
+import operator
+from sqlalchemy import CheckConstraint, Column, DateTime, ForeignKey, Integer, String
 from sqlalchemy.dialects.postgresql import UUID
 from sqlalchemy.orm import relationship
 from typing import Dict
@@ -38,7 +39,7 @@ class LinkModel(_Base):
             'name'             : self.link_name,
             'link_endpoint_ids': [
                 link_endpoint.endpoint.dump_id()
-                for link_endpoint in self.link_endpoints
+                for link_endpoint in sorted(self.link_endpoints, key=operator.attrgetter('position'))
             ],
         }
 
@@ -47,6 +48,11 @@ class LinkEndPointModel(_Base):
 
     link_uuid     = Column(ForeignKey('link.link_uuid',         ondelete='CASCADE' ), primary_key=True)
     endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
+    position      = Column(Integer, nullable=False)
 
     link     = relationship('LinkModel',     back_populates='link_endpoints', lazy='joined')
     endpoint = relationship('EndPointModel', lazy='joined') # back_populates='link_endpoints'
+
+    __table_args__ = (
+        CheckConstraint(position >= 0, name='check_position_value'),
+    )
-- 
GitLab


From 788d91ca854640efaedea2427b0b7d7ea1f0bca5 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 21:37:36 +0000
Subject: [PATCH 153/229] Compute component:

- Added bearers for OFC'23
---
 .../rest_server/nbi_plugins/ietf_l2vpn/Constants.py    | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
index f95b532af..b4f34c12a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
@@ -74,4 +74,14 @@ BEARER_MAPPINGS = {
     'R3:1/3': ('R3', '1/3', '5.3.1.3', None, 0, None, None, None, None),
     'R4:1/2': ('R4', '1/2', '5.4.1.2', None, 0, None, None, None, None),
     'R4:1/3': ('R4', '1/3', '5.4.1.3', None, 0, None, None, None, None),
+
+    # OFC'23
+    'PE1:1/2': ('PE1', '1/1', '10.1.1.1', None, 0, None, None, None, None),
+    'PE1:1/3': ('PE1', '1/2', '10.1.1.2', None, 0, None, None, None, None),
+    'PE2:1/2': ('PE2', '1/1', '10.2.1.1', None, 0, None, None, None, None),
+    'PE2:1/3': ('PE2', '1/2', '10.2.1.2', None, 0, None, None, None, None),
+    'PE3:1/2': ('PE3', '1/1', '10.3.1.1', None, 0, None, None, None, None),
+    'PE3:1/3': ('PE3', '1/2', '10.3.1.2', None, 0, None, None, None, None),
+    'PE4:1/2': ('PE4', '1/1', '10.4.1.1', None, 0, None, None, None, None),
+    'PE4:1/3': ('PE4', '1/2', '10.4.1.2', None, 0, None, None, None, None),
 }
-- 
GitLab


From 832ce92478ad2385291bd42779c16581bb150b65 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 21:38:23 +0000
Subject: [PATCH 154/229] Device component - IETF L2VPN Driver:

- Corrected resource parsing in SetConfig and DeleteConfig
---
 .../drivers/ietf_l2vpn/IetfL2VpnDriver.py     | 109 ++++++++++--------
 1 file changed, 63 insertions(+), 46 deletions(-)

diff --git a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
index 2bcb64384..8c7feb249 100644
--- a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
+++ b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import logging, threading
+import json, logging, threading
 from typing import Any, Iterator, List, Optional, Tuple, Union
 from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
 from common.tools.object_factory.Device import json_device_id
@@ -20,7 +20,7 @@ from common.tools.object_factory.EndPoint import json_endpoint_id
 from common.type_checkers.Checkers import chk_string, chk_type
 from device.service.driver_api._Driver import _Driver, RESOURCE_ENDPOINTS, RESOURCE_SERVICES
 from device.service.drivers.ietf_l2vpn.TfsDebugApiClient import TfsDebugApiClient
-from .Tools import connection_point, find_key, wim_mapping
+from .Tools import connection_point, wim_mapping
 from .WimconnectorIETFL2VPN import WimconnectorIETFL2VPN
 
 LOGGER = logging.getLogger(__name__)
@@ -121,38 +121,55 @@ class IetfL2VpnDriver(_Driver):
             self.wim.check_credentials()
             for resource in resources:
                 LOGGER.info('resource = {:s}'.format(str(resource)))
-
-                service_uuid = find_key(resource, 'uuid')
-
-                if service_exists(self.wim, service_uuid):
-                    exc = NotImplementedError('IETF L2VPN Service Update is still not supported')
-                    results.append((resource[0], exc))
-                    continue
-
-                src_device_uuid   = find_key(resource, 'src_device_uuid')
-                src_endpoint_uuid = find_key(resource, 'src_endpoint_uuid')
-                dst_device_uuid   = find_key(resource, 'dst_device_uuid')
-                dst_endpoint_uuid = find_key(resource, 'dst_endpoint_uuid')
-                encap_type        = find_key(resource, 'encapsulation_type')
-                vlan_id           = find_key(resource, 'vlan_id')
-
-                src_endpoint_id = json_endpoint_id(json_device_id(src_device_uuid), src_endpoint_uuid)
-                src_service_endpoint_id, src_mapping = wim_mapping('1', src_endpoint_id)
-                self.wim.mappings[src_service_endpoint_id] = src_mapping
-
-                dst_endpoint_id = json_endpoint_id(json_device_id(dst_device_uuid), dst_endpoint_uuid)
-                dst_service_endpoint_id, dst_mapping = wim_mapping('2', dst_endpoint_id)
-                self.wim.mappings[dst_service_endpoint_id] = dst_mapping
-
-                connection_points = [
-                    connection_point(src_service_endpoint_id, encap_type, vlan_id),
-                    connection_point(dst_service_endpoint_id, encap_type, vlan_id),
-                ]
-
-                result = self.wim.create_connectivity_service(SERVICE_TYPE, connection_points)
-                LOGGER.info('[SetConfig] CREATE result={:s}'.format(str(result)))
-
-                results.extend(process_connectivity_service('SetConfig', None))
+                resource_key,resource_value = resource
+                try:
+                    resource_value = json.loads(resource_value)
+                    service_uuid = resource_value['uuid']
+
+                    if service_exists(self.wim, service_uuid):
+                        exc = NotImplementedError('IETF L2VPN Service Update is still not supported')
+                        results.append((resource[0], exc))
+                        continue
+
+                    src_device_endpoint = resource_value['src']
+                    src_device = src_device_endpoint['device']
+                    #src_device_uuid = src_device['uuid']
+                    src_device_name = src_device['name']
+                    src_endpoint = src_device_endpoint['endpoint']
+                    #src_endpoint_uuid = src_endpoint['uuid']
+                    src_endpoint_name = src_endpoint['name']
+
+                    dst_device_endpoint = resource_value['dst']
+                    dst_device = dst_device_endpoint['device']
+                    #dst_device_uuid = dst_device['uuid']
+                    dst_device_name = dst_device['name']
+                    dst_endpoint = dst_device_endpoint['endpoint']
+                    #dst_endpoint_uuid = dst_endpoint['uuid']
+                    dst_endpoint_name = dst_endpoint['name']
+
+                    encap_type = resource_value['encapsulation_type']
+                    vlan_id    = resource_value['vlan_id']
+
+                    src_endpoint_id = json_endpoint_id(json_device_id(src_device_name), src_endpoint_name)
+                    src_service_endpoint_id, src_mapping = wim_mapping('1', src_endpoint_id)
+                    self.wim.mappings[src_service_endpoint_id] = src_mapping
+
+                    dst_endpoint_id = json_endpoint_id(json_device_id(dst_device_name), dst_endpoint_name)
+                    dst_service_endpoint_id, dst_mapping = wim_mapping('2', dst_endpoint_id)
+                    self.wim.mappings[dst_service_endpoint_id] = dst_mapping
+
+                    connection_points = [
+                        connection_point(src_service_endpoint_id, encap_type, vlan_id),
+                        connection_point(dst_service_endpoint_id, encap_type, vlan_id),
+                    ]
+
+                    result = self.wim.create_connectivity_service(SERVICE_TYPE, connection_points)
+                    LOGGER.info('[SetConfig] CREATE result={:s}'.format(str(result)))
+
+                    results.extend(process_connectivity_service('SetConfig', None))
+                except Exception as e: # pylint: disable=broad-except
+                    LOGGER.exception('Unhandled error processing resource_key({:s})'.format(str(resource_key)))
+                    results.append((resource_key, e))
         return results
 
     @metered_subclass_method(METRICS_POOL)
@@ -163,18 +180,18 @@ class IetfL2VpnDriver(_Driver):
             self.wim.check_credentials()
             for resource in resources:
                 LOGGER.info('resource = {:s}'.format(str(resource)))
-                service_uuid = find_key(resource, 'uuid')
-
-                conn_info = {}
-
-                result = self.wim.get_connectivity_service_status(
-                    service_uuid, conn_info=conn_info)
-                if service_exists(result):
-                    self.wim.delete_connectivity_service(
-                        service_uuid, conn_info=conn_info)
-                else:
-                    result = False
-                results.extend(process_connectivity_service('DeleteConfig', None))
+                resource_key,resource_value = resource
+                try:
+                    resource_value = json.loads(resource_value)
+                    service_uuid = resource_value['uuid']
+
+                    if service_exists(self.wim, service_uuid):
+                        self.wim.delete_connectivity_service(service_uuid)
+
+                    results.extend(process_connectivity_service('DeleteConfig', None))
+                except Exception as e: # pylint: disable=broad-except
+                    LOGGER.exception('Unhandled error processing resource_key({:s})'.format(str(resource_key)))
+                    results.append((resource_key, e))
         return results
 
     @metered_subclass_method(METRICS_POOL)
-- 
GitLab


From d6a9525f1191558ed7df7546f2c2cadd9aec9db6 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 21:39:05 +0000
Subject: [PATCH 155/229] Service component - L2NM IETF L2VPN service handler:

- Corrected Device request composition
---
 .../L2NM_IETFL2VPN_ServiceHandler.py          | 31 ++++++++++++-------
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
index f84c8c824..f58c7809f 100644
--- a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
+++ b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
@@ -53,26 +53,35 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
         results = []
         try:
             src_device_uuid, src_endpoint_uuid = get_device_endpoint_uuids(endpoints[0])
+            src_device = self.__task_executor.get_device(DeviceId(**json_device_id(src_device_uuid)))
+            src_endpoint = get_endpoint_matching(src_device, src_endpoint_uuid)
+            src_manager =  self.__task_executor.get_device_manager(src_device)
+
             dst_device_uuid, dst_endpoint_uuid = get_device_endpoint_uuids(endpoints[1])
+            dst_device = self.__task_executor.get_device(DeviceId(**json_device_id(dst_device_uuid)))
+            dst_endpoint = get_endpoint_matching(dst_device, dst_endpoint_uuid)
+            dst_manager =  self.__task_executor.get_device_manager(dst_device)
 
-            if src_device_uuid != dst_device_uuid:
+            if src_manager.device_id.device_uuid.uuid != dst_manager.device_id.device_uuid.uuid:
                 raise Exception('Different Src-Dst devices not supported by now')
-            device_uuid = src_device_uuid
-
-            device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+            manager = src_manager
 
             json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
                 'uuid'              : service_uuid,
-                'src_device_uuid'   : src_device_uuid,
-                'src_endpoint_uuid' : src_endpoint_uuid,
-                'dst_device_uuid'   : dst_device_uuid,
-                'dst_endpoint_uuid' : dst_endpoint_uuid,
                 'encapsulation_type': encap_type,
                 'vlan_id'           : vlan_id,
+                'src': {
+                    'device'  : {'uuid': src_device_uuid,   'name': src_device.name  },
+                    'endpoint': {'uuid': src_endpoint_uuid, 'name': src_endpoint.name},
+                },
+                'dst': {
+                    'device'  : {'uuid': dst_device_uuid,   'name': dst_device.name  },
+                    'endpoint': {'uuid': dst_endpoint_uuid, 'name': dst_endpoint.name},
+                },
             })
-            del device_obj.device_config.config_rules[:]
-            device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
-            self.__task_executor.configure_device(device_obj)
+            del manager.device_config.config_rules[:]
+            manager.device_config.config_rules.append(ConfigRule(**json_config_rule))
+            self.__task_executor.configure_device(manager)
             results.append(True)
         except Exception as e: # pylint: disable=broad-except
             LOGGER.exception('Unable to SetEndpoint for Service({:s})'.format(str(service_uuid)))
-- 
GitLab


From f31ec4b7ea29b384ef8e384efeabd04deea4e628 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 21:39:29 +0000
Subject: [PATCH 156/229] Service component:

- Added helprt method to get manager for devices
---
 .../service/task_scheduler/TaskExecutor.py    | 36 +++++++++++--------
 1 file changed, 21 insertions(+), 15 deletions(-)

diff --git a/src/service/service/task_scheduler/TaskExecutor.py b/src/service/service/task_scheduler/TaskExecutor.py
index e475f29c6..54aef8c37 100644
--- a/src/service/service/task_scheduler/TaskExecutor.py
+++ b/src/service/service/task_scheduler/TaskExecutor.py
@@ -105,6 +105,22 @@ class TaskExecutor:
         self._device_client.ConfigureDevice(device)
         self._store_grpc_object(CacheableObjectType.DEVICE, device_key, device)
 
+    def get_device_manager(self, device : Device) -> Optional[Device]:
+        json_manager = None
+        for config_rule in device.device_config.config_rules:
+            if config_rule.WhichOneof('config_rule') != 'custom': continue
+            if config_rule.custom.resource_key != '_manager': continue
+            json_manager = json.loads(config_rule.custom.resource_value)
+            break
+
+        if json_manager is None: return None
+
+        manager_uuid = json_manager['uuid']
+        manager = self.get_device(DeviceId(**json_device_id(manager_uuid)))
+        manager_uuid = manager.device_id.device_uuid.uuid
+        if manager is None: raise Exception('Device({:s}) not found'.format(str(manager_uuid)))
+        return manager
+
     def get_devices_from_connection(
         self, connection : Connection, exclude_managed : bool = False
     ) -> Dict[str, Device]:
@@ -114,23 +130,13 @@ class TaskExecutor:
             device_uuid = endpoint_id.device_id.device_uuid.uuid
             if device is None: raise Exception('Device({:s}) not found'.format(str(device_uuid)))
 
-            manager = None
-            for config_rule in device.device_config.config_rules:
-                if config_rule.WhichOneof('config_rule') != 'custom': continue
-                if config_rule.custom.resource_key != '_manager': continue
-                manager = json.loads(config_rule.custom.resource_value)
-                break
-
-            if manager is not None:
+            manager = self.get_device_manager(device)
+            if manager is None:
+                devices[device_uuid] = device
+            else:
                 if not exclude_managed:
                     devices[device_uuid] = device
-                manager_uuid = manager['uuid']
-                manager = self.get_device(DeviceId(**json_device_id(manager_uuid)))
-                manager_uuid = manager.device_id.device_uuid.uuid
-                if manager is None: raise Exception('Device({:s}) not found'.format(str(manager_uuid)))
-                devices[manager_uuid] = manager
-            else:
-                devices[device_uuid] = device
+                devices[manager.device_id.device_uuid.uuid] = manager
         return devices
 
     # ----- Service-related methods ------------------------------------------------------------------------------------
-- 
GitLab


From 912d24e50a30732a1f4664a4201bd79628c99360 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 21:40:08 +0000
Subject: [PATCH 157/229] Tools - Mock MW SDN Ctrl:

- Added logs to investigate issue (POST seems not to work)
---
 .../tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py   | 29 ++++++++++++++-----
 1 file changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
index f002d2376..d4aabbe5b 100644
--- a/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
+++ b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
@@ -91,22 +91,37 @@ class Services(Resource):
         return jsonify({'ietf-eth-tran-service:etht-svc': {'etht-svc-instances': services}})
 
     def post(self):
+        LOGGER.info('[post] begin')
         try:
-            json_request = request.json
-            if not json_request: abort(400)
-            if not isinstance(json_request, dict): abort(400)
-            if 'etht-svc-instances' not in json_request: abort(400)
+            json_request = request.get_json()
+            LOGGER.info('[post] json_request={:s}'.format(str(json_request)))
+            if not json_request:
+                LOGGER.info('[post] abort 1')
+                abort(400)
+            if not isinstance(json_request, dict):
+                LOGGER.info('[post] abort 2')
+                abort(400)
+            if 'etht-svc-instances' not in json_request:
+                LOGGER.info('[post] abort 3')
+                abort(400)
             json_services = json_request['etht-svc-instances']
-            if not isinstance(json_services, list): abort(400)
-            if len(json_services) != 1: abort(400)
+            LOGGER.info('[post] json_services={:s}'.format(str(json_services)))
+            if not isinstance(json_services, list):
+                LOGGER.info('[post] abort 4')
+                abort(400)
+            if len(json_services) != 1:
+                LOGGER.info('[post] abort 5')
+                abort(400)
             svc_data = json_services[0]
+            LOGGER.info('[post] svc_data={:s}'.format(str(svc_data)))
             etht_svc_name = svc_data['etht-svc-name']
+            LOGGER.info('[post] etht_svc_name={:s}'.format(str(etht_svc_name)))
             NETWORK_SERVICES[etht_svc_name] = svc_data
+            LOGGER.info('[post] done')
             return jsonify({}), 201
         except:
             LOGGER.exception('Exception in POST')
 
-
 class DelServices(Resource):
     def delete(self, service_uuid : str):
         NETWORK_SERVICES.pop(service_uuid, None)
-- 
GitLab


From 1e3dfb1a91e9ec7e26f6eace09f7244fac08c4d9 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 21:42:01 +0000
Subject: [PATCH 158/229] PathComp component - Frontend:

- Added logic to ignore mgmt-related links
- Improved composition of subservice config rules
- Cleaned up Constants
- Updated sub-service computation logic
---
 .../frontend/service/algorithms/_Algorithm.py | 134 ++++++------
 .../algorithms/tools/ComposeConfigRules.py    |  89 ++++++++
 .../algorithms/tools/ComputeSubServices.py    | 195 ++++++++++++++----
 .../algorithms/tools/ConstantsMappings.py     |  49 -----
 4 files changed, 319 insertions(+), 148 deletions(-)
 create mode 100644 src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py

diff --git a/src/pathcomp/frontend/service/algorithms/_Algorithm.py b/src/pathcomp/frontend/service/algorithms/_Algorithm.py
index b63167749..0286e1420 100644
--- a/src/pathcomp/frontend/service/algorithms/_Algorithm.py
+++ b/src/pathcomp/frontend/service/algorithms/_Algorithm.py
@@ -15,13 +15,12 @@
 import json, logging, requests
 from typing import Dict, List, Optional, Tuple, Union
 from common.proto.context_pb2 import (
-    ConfigRule, Connection, Device, DeviceList, EndPointId, Link, LinkList, Service, ServiceStatusEnum,
-    ServiceTypeEnum)
+    Connection, Device, DeviceList, EndPointId, Link, LinkList, Service, ServiceStatusEnum, ServiceTypeEnum)
 from common.proto.pathcomp_pb2 import PathCompReply, PathCompRequest
-from common.tools.object_factory.ConfigRule import json_config_rule_set
 from pathcomp.frontend.Config import BACKEND_URL
-from pathcomp.frontend.service.algorithms.tools.ConstantsMappings import DEVICE_LAYER_TO_SERVICE_TYPE, DeviceLayerEnum
 from .tools.EroPathToHops import eropath_to_hops
+from .tools.ComposeConfigRules import (
+    compose_device_config_rules, compose_l2nm_config_rules, compose_l3nm_config_rules, compose_tapi_config_rules)
 from .tools.ComposeRequest import compose_device, compose_link, compose_service
 from .tools.ComputeSubServices import (
     convert_explicit_path_hops_to_connections, convert_explicit_path_hops_to_plain_connection)
@@ -78,6 +77,8 @@ class _Algorithm:
     def add_links(self, grpc_links : Union[List[Link], LinkList]) -> None:
         if isinstance(grpc_links, LinkList): grpc_links = grpc_links.links
         for grpc_link in grpc_links:
+            if 'mgmt' in grpc_link.name.lower(): continue
+
             json_link = compose_link(grpc_link)
             if len(json_link['link_endpoint_ids']) != 2: continue
             self.link_list.append(json_link)
@@ -148,9 +149,8 @@ class _Algorithm:
         return connection
 
     def add_service_to_reply(
-        self, reply : PathCompReply, context_uuid : str, service_uuid : str,
-        device_layer : Optional[DeviceLayerEnum] = None, path_hops : List[Dict] = [],
-        config_rules : List = []
+        self, reply : PathCompReply, context_uuid : str, service_uuid : str, service_type : ServiceTypeEnum,
+        path_hops : List[Dict] = [], config_rules : List = []
     ) -> Service:
         # TODO: implement support for multi-point services
         # Control deactivated to enable disjoint paths with multiple redundant endpoints on each side
@@ -159,44 +159,41 @@ class _Algorithm:
 
         service_key = (context_uuid, service_uuid)
         tuple_service = self.service_dict.get(service_key)
-        if tuple_service is not None:
-            service = reply.services.add()
-            service.CopyFrom(tuple_service[1])
+
+        service = reply.services.add()
+        service.service_id.context_id.context_uuid.uuid = context_uuid
+        service.service_id.service_uuid.uuid = service_uuid
+        service.service_type = service_type
+
+        if service_type == ServiceTypeEnum.SERVICETYPE_L2NM:
+            compose_l2nm_config_rules(config_rules, service.service_config.config_rules)
+        elif service_type == ServiceTypeEnum.SERVICETYPE_L3NM:
+            compose_l3nm_config_rules(config_rules, service.service_config.config_rules)
+        elif service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
+            compose_tapi_config_rules(config_rules, service.service_config.config_rules)
         else:
-            service = reply.services.add()
-            service.service_id.context_id.context_uuid.uuid = context_uuid
-            service.service_id.service_uuid.uuid = service_uuid
-
-            if device_layer is not None:
-                service_type = DEVICE_LAYER_TO_SERVICE_TYPE.get(device_layer.value)
-                if service_type is None:
-                    MSG = 'Unable to map DeviceLayer({:s}) to ServiceType'
-                    raise Exception(MSG.format(str(device_layer)))
-                service.service_type = service_type
-
-                if service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
-                    json_tapi_settings = {
-                        'capacity_value'  : 50.0,
-                        'capacity_unit'   : 'GHz',
-                        'layer_proto_name': 'PHOTONIC_MEDIA',
-                        'layer_proto_qual': 'tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC',
-                        'direction'       : 'UNIDIRECTIONAL',
-                    }
-                    config_rule = ConfigRule(**json_config_rule_set('/settings', json_tapi_settings))
-                    service.service_config.config_rules.append(config_rule)
-                else:
-                    service.service_config.config_rules.extend(config_rules)
+            MSG = 'Unhandled generic Config Rules for service {:s} {:s}'
+            self.logger.warning(MSG.format(str(service_uuid), str(ServiceTypeEnum.Name(service_type))))
 
-            service.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED
+        compose_device_config_rules(config_rules, service.service_config.config_rules, path_hops)
+
+        if path_hops is not None and len(path_hops) > 0:
+            ingress_endpoint_id = service.service_endpoint_ids.add()
+            ingress_endpoint_id.device_id.device_uuid.uuid = path_hops[0]['device']
+            ingress_endpoint_id.endpoint_uuid.uuid = path_hops[0]['ingress_ep']
 
-            if path_hops is not None and len(path_hops) > 0:
-                ingress_endpoint_id = service.service_endpoint_ids.add()
-                ingress_endpoint_id.device_id.device_uuid.uuid = path_hops[0]['device']
-                ingress_endpoint_id.endpoint_uuid.uuid = path_hops[0]['ingress_ep']
+            egress_endpoint_id = service.service_endpoint_ids.add()
+            egress_endpoint_id.device_id.device_uuid.uuid = path_hops[-1]['device']
+            egress_endpoint_id.endpoint_uuid.uuid = path_hops[-1]['egress_ep']
 
-                egress_endpoint_id = service.service_endpoint_ids.add()
-                egress_endpoint_id.device_id.device_uuid.uuid = path_hops[-1]['device']
-                egress_endpoint_id.endpoint_uuid.uuid = path_hops[-1]['egress_ep']
+        if tuple_service is None:
+            service.service_status.service_status = ServiceStatusEnum.SERVICESTATUS_PLANNED
+        else:
+            service.name = tuple_service[1].name
+            service.service_status.CopyFrom(tuple_service[1].service_status)
+            service.timestamp.CopyFrom(tuple_service[1].timestamp)
+            for constraint in tuple_service[1].service_constraints:
+                service.service_constraints.add().CopyFrom(constraint)
 
         return service
 
@@ -206,41 +203,54 @@ class _Algorithm:
         grpc_services : Dict[Tuple[str, str], Service] = {}
         grpc_connections : Dict[str, Connection] = {}
         for response in response_list:
-            service_id = response['serviceId']
-            context_uuid = service_id['contextId']
-            service_uuid = service_id['service_uuid']
-            service_key = (context_uuid, service_uuid)
-            upper_service = self.add_service_to_reply(reply, context_uuid, service_uuid)
-            grpc_services[service_key] = upper_service
+            orig_service_id = response['serviceId']
+            context_uuid = orig_service_id['contextId']
+            main_service_uuid = orig_service_id['service_uuid']
+            orig_service_key = (context_uuid, main_service_uuid)
+            _,grpc_orig_service = self.service_dict[orig_service_key]
+            main_service_type = grpc_orig_service.service_type
 
             no_path_issue = response.get('noPath', {}).get('issue')
             if no_path_issue is not None:
                 # no path found: leave connection with no endpoints
                 # no_path_issue == 1 => no path due to a constraint
+                grpc_services[service_key] = grpc_orig_service
                 continue
 
+            orig_config_rules = grpc_orig_service.service_config.config_rules
+
             for service_path_ero in response['path']:
+                self.logger.debug('service_path_ero["devices"] = {:s}'.format(str(service_path_ero['devices'])))
+                _endpoint_to_link_dict = {k:v[0] for k,v in self.endpoint_to_link_dict.items()}
+                self.logger.debug('self.endpoint_to_link_dict = {:s}'.format(str(_endpoint_to_link_dict)))
                 path_hops = eropath_to_hops(service_path_ero['devices'], self.endpoint_to_link_dict)
+                self.logger.debug('path_hops = {:s}'.format(str(path_hops)))
                 try:
-                    connections = convert_explicit_path_hops_to_connections(path_hops, self.device_dict, service_uuid)
+                    _device_dict = {k:v[0] for k,v in self.device_dict.items()}
+                    self.logger.debug('self.device_dict = {:s}'.format(str(_device_dict)))
+                    connections = convert_explicit_path_hops_to_connections(
+                        path_hops, self.device_dict, main_service_uuid, main_service_type)
+                    self.logger.debug('EXTRAPOLATED connections = {:s}'.format(str(connections)))
                 except: # pylint: disable=bare-except
-                    # if not able to extrapolate sub-services and sub-connections,
-                    # assume single service and single connection
-                    connections = convert_explicit_path_hops_to_plain_connection(path_hops, service_uuid)
+                    MSG = ' '.join([
+                        'Unable to Extrapolate sub-services and sub-connections.',
+                        'Assuming single-service and single-connection.',
+                    ])
+                    self.logger.exception(MSG)
+                    connections = convert_explicit_path_hops_to_plain_connection(
+                        path_hops, main_service_uuid, main_service_type)
+                    self.logger.debug('BASIC connections = {:s}'.format(str(connections)))
 
                 for connection in connections:
-                    connection_uuid,device_layer,path_hops,_ = connection
+                    connection_uuid,service_type,path_hops,_ = connection
                     service_key = (context_uuid, connection_uuid)
-                    grpc_service = grpc_services.get(service_key)
-                    if grpc_service is None:
-                        config_rules = upper_service.service_config.config_rules
-                        grpc_service = self.add_service_to_reply(
-                            reply, context_uuid, connection_uuid, device_layer=device_layer, path_hops=path_hops,
-                            config_rules=config_rules)
-                        grpc_services[service_key] = grpc_service
+                    grpc_service = self.add_service_to_reply(
+                        reply, context_uuid, connection_uuid, service_type, path_hops=path_hops,
+                        config_rules=orig_config_rules)
+                    grpc_services[service_key] = grpc_service
 
                 for connection in connections:
-                    connection_uuid,device_layer,path_hops,dependencies = connection
+                    connection_uuid,_,path_hops,dependencies = connection
 
                     service_key = (context_uuid, connection_uuid)
                     grpc_service = grpc_services.get(service_key)
@@ -251,8 +261,8 @@ class _Algorithm:
                     grpc_connection = self.add_connection_to_reply(reply, connection_uuid, grpc_service, path_hops)
                     grpc_connections[connection_uuid] = grpc_connection
 
-                    for service_uuid in dependencies:
-                        sub_service_key = (context_uuid, service_uuid)
+                    for sub_service_uuid in dependencies:
+                        sub_service_key = (context_uuid, sub_service_uuid)
                         grpc_sub_service = grpc_services.get(sub_service_key)
                         if grpc_sub_service is None:
                             raise Exception('Service({:s}) not found'.format(str(sub_service_key)))
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py b/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py
new file mode 100644
index 000000000..30845bb11
--- /dev/null
+++ b/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py
@@ -0,0 +1,89 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json, re
+from typing import Dict, List, Optional
+from common.proto.context_pb2 import ConfigRule
+from common.tools.object_factory.ConfigRule import json_config_rule_set
+
+SETTINGS_RULE_NAME = '/settings'
+
+DEV_EP_SETTINGS = re.compile(r'\/device\[([^\]]+)\]\/endpoint\[([^\]]+)\]\/settings')
+
+L2NM_SETTINGS_FIELD_DEFAULTS = {
+    'encapsulation_type': 'dot1q',
+    'vlan_id'           : 100,
+    'mtu'               : 1450,
+}
+
+L3NM_SETTINGS_FIELD_DEFAULTS = {
+    'encapsulation_type': 'dot1q',
+    'vlan_id'           : 100,
+    'mtu'               : 1450,
+}
+
+TAPI_SETTINGS_FIELD_DEFAULTS = {
+    'capacity_value'  : 50.0,
+    'capacity_unit'   : 'GHz',
+    'layer_proto_name': 'PHOTONIC_MEDIA',
+    'layer_proto_qual': 'tapi-photonic-media:PHOTONIC_LAYER_QUALIFIER_NMC',
+    'direction'       : 'UNIDIRECTIONAL',
+}
+
+def find_custom_config_rule(config_rules : List, resource_name : str) -> Optional[Dict]:
+    resource_value : Optional[Dict] = None
+    for config_rule in config_rules:
+        if config_rule.WhichOneof('config_rule') != 'custom': continue
+        if config_rule.custom.resource_key != resource_name: continue
+        resource_value = json.loads(config_rule.custom.resource_value)
+    return resource_value
+
+def compose_config_rules(
+    main_service_config_rules : List, subservice_config_rules : List, field_defaults : Dict
+) -> None:
+    settings = find_custom_config_rule(main_service_config_rules, SETTINGS_RULE_NAME)
+    if settings is None: return
+
+    json_settings = {}
+    for field_name,default_value in field_defaults.items():
+        json_settings[field_name] = settings.get(field_name, default_value)
+
+    config_rule = ConfigRule(**json_config_rule_set('/settings', json_settings))
+    subservice_config_rules.append(config_rule)
+
+def compose_l2nm_config_rules(main_service_config_rules : List, subservice_config_rules : List) -> None:
+    compose_config_rules(main_service_config_rules, subservice_config_rules, L2NM_SETTINGS_FIELD_DEFAULTS)
+
+def compose_l3nm_config_rules(main_service_config_rules : List, subservice_config_rules : List) -> None:
+    compose_config_rules(main_service_config_rules, subservice_config_rules, L3NM_SETTINGS_FIELD_DEFAULTS)
+
+def compose_tapi_config_rules(main_service_config_rules : List, subservice_config_rules : List) -> None:
+    compose_config_rules(main_service_config_rules, subservice_config_rules, TAPI_SETTINGS_FIELD_DEFAULTS)
+
+def compose_device_config_rules(config_rules : List, subservice_config_rules : List, path_hops : List) -> None:
+    endpoints_traversed = set()
+    for path_hop in path_hops:
+        device_uuid_or_name = path_hop['device']
+        endpoints_traversed.add((device_uuid_or_name, path_hop['ingress_ep']))
+        endpoints_traversed.add((device_uuid_or_name, path_hop['egress_ep']))
+
+    for config_rule in config_rules:
+        if config_rule.WhichOneof('config_rule') != 'custom': continue
+        match = DEV_EP_SETTINGS.match(config_rule.custom.resource_key)
+        if match is None: continue
+        device_uuid_or_name = match.group(1)
+        endpoint_uuid_or_name = match.group(2)
+        dev_ep_kep = (device_uuid_or_name, endpoint_uuid_or_name)
+        if dev_ep_kep not in endpoints_traversed: continue
+        subservice_config_rules.append(config_rule)
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py b/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
index b92a19b52..75701b99e 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
@@ -30,56 +30,176 @@
 # ]
 #
 # connections=[
-#     (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), <DeviceLayerEnum.OPTICAL_CONTROLLER: 1>, [
+#     (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), ServiceTypeEnum.TAPI, [
 #             {'device': 'TN-OLS', 'ingress_ep': '833760219d0f', 'egress_ep': 'cf176771a4b9'}
 #         ], []),
-#     (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), <DeviceLayerEnum.PACKET_DEVICE: 30>, [
+#     (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), ServiceTypeEnum.L2NM, [
 #             {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
 #             {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
 #             {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
 #             {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'}
 #         ], [UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e')]),
-#     (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), <DeviceLayerEnum.APPLICATION_DEVICE: 40>, [
+#     (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), ServiceTypeEnum.L2NM, [
 #             {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
 #             {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
 #         ], [UUID('c2e57966-5d82-4705-a5fe-44cf6487219e')])
 # ]
 
-import queue, uuid
-from typing import Dict, List, Tuple
-from common.proto.context_pb2 import Device
-from .ConstantsMappings import DEVICE_TYPE_TO_LAYER, DeviceLayerEnum
+import enum, json, queue, uuid
+from typing import Dict, List, Optional, Tuple
+from common.DeviceTypes import DeviceTypeEnum
+from common.proto.context_pb2 import Device, ServiceTypeEnum
+
+class StackActionEnum(enum.Enum):
+    PATH_INGRESS         = 'ingress'
+    CREATE_CONNECTION    = 'create'
+    APPEND_PATH_HOP      = 'append'
+    CHAIN_CONNECTION     = 'chain'
+    TERMINATE_CONNECTION = 'terminate'
+
+def is_datacenter(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.DATACENTER, DeviceTypeEnum.EMULATED_DATACENTER}
+
+def is_packet_router(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.PACKET_ROUTER, DeviceTypeEnum.EMULATED_PACKET_ROUTER}
+
+def is_packet_switch(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH}
+
+def is_packet_device(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return is_packet_router(dev_type) or is_packet_switch(dev_type)
+
+def is_tfs_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.TERAFLOWSDN_CONTROLLER}
+
+def is_mw_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM, DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM}
+
+def is_ipm_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.XR_CONSTELLATION, DeviceTypeEnum.EMULATED_XR_CONSTELLATION}
+
+def is_ols_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.OPEN_LINE_SYSTEM, DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM}
+
+def is_subdevice(dev_manager : Optional[str]) -> bool:
+    return dev_manager is not None
+
+def is_subdevice_equal(dev_manager_a : Optional[str], dev_manager_b : Optional[str]) -> bool:
+    if dev_manager_a is None and dev_manager_b is None: return True
+    if dev_manager_a is not None and dev_manager_b is not None: return dev_manager_a == dev_manager_b
+    return False
+
+def get_action(
+    prv_type : Optional[DeviceTypeEnum], prv_manager : Optional[str],
+    cur_type : DeviceTypeEnum, cur_manager : Optional[str]
+) -> StackActionEnum:
+    if prv_type is None:
+        return StackActionEnum.PATH_INGRESS
+
+    if is_datacenter(prv_type):
+        if is_packet_device(cur_type): return StackActionEnum.CREATE_CONNECTION
+        if is_tfs_controller(cur_type): return StackActionEnum.CREATE_CONNECTION
+
+    if is_packet_device(prv_type):
+        if is_datacenter(cur_type): return StackActionEnum.TERMINATE_CONNECTION
+        if is_packet_device(cur_type):
+            if is_subdevice_equal(cur_manager, prv_manager): return StackActionEnum.APPEND_PATH_HOP
+            if is_subdevice(prv_manager) and not is_subdevice(cur_manager): return StackActionEnum.TERMINATE_CONNECTION
+            if not is_subdevice(prv_manager) and is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
+
+        if is_mw_controller(cur_type) and not is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
+        if is_ols_controller(cur_type) and not is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
+        if is_tfs_controller(cur_type) and is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
+
+    if is_mw_controller(prv_type) or is_ols_controller(prv_type):
+        if is_packet_device(cur_type): return StackActionEnum.TERMINATE_CONNECTION
+
+    if is_tfs_controller(prv_type):
+        if is_tfs_controller(cur_type) and is_subdevice_equal(prv_manager, cur_manager): return StackActionEnum.APPEND_PATH_HOP
+        if is_datacenter(cur_type): return StackActionEnum.TERMINATE_CONNECTION
+        if is_packet_device(cur_type): return StackActionEnum.TERMINATE_CONNECTION
+        if is_mw_controller(cur_type) or is_ols_controller(cur_type): return StackActionEnum.CHAIN_CONNECTION
+
+    str_fields = ', '.join([
+        'prv_type={:s}'.format(str(prv_type)), 'prv_manager={:s}'.format(str(prv_manager)),
+        'cur_type={:s}'.format(str(cur_type)), 'cur_manager={:s}'.format(str(cur_manager)),
+    ])
+    raise Exception('Undefined Action for ({:s})'.format(str_fields))
+
+def get_device_manager_uuid(device : Device) -> Optional[str]:
+    for config_rule in device.device_config.config_rules:
+        if config_rule.WhichOneof('config_rule') != 'custom': continue
+        if config_rule.custom.resource_key != '_manager': continue
+        device_manager_id = json.loads(config_rule.custom.resource_value)
+        return device_manager_id['uuid']
+    return None
+
+def get_device_type(
+    grpc_device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_manager_uuid : Optional[str]
+) -> DeviceTypeEnum:
+    if device_manager_uuid is None:
+        return DeviceTypeEnum._value2member_map_[grpc_device.device_type] # pylint: disable=no-member
+    device_manager_tuple = device_dict.get(device_manager_uuid)
+    if device_manager_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_manager_uuid)))
+    _,grpc_device = device_manager_tuple
+    return DeviceTypeEnum._value2member_map_[grpc_device.device_type] # pylint: disable=no-member
+
+SERVICE_TYPE_LXNM = {ServiceTypeEnum.SERVICETYPE_L3NM, ServiceTypeEnum.SERVICETYPE_L2NM}
+
+def get_service_type(device_type : DeviceTypeEnum, prv_service_type : ServiceTypeEnum) -> ServiceTypeEnum:
+    if is_tfs_controller(device_type) or is_packet_router(device_type):
+        if prv_service_type in SERVICE_TYPE_LXNM: return prv_service_type
+    if is_packet_switch(device_type) or is_mw_controller(device_type):
+        if prv_service_type == ServiceTypeEnum.SERVICETYPE_L2NM: return prv_service_type
+    if is_ols_controller(device_type) or is_ipm_controller(device_type):
+        return ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE
+
+    str_fields = ', '.join([
+        'device_type={:s}'.format(str(device_type)),
+    ])
+    raise Exception('Undefined Service Type for ({:s})'.format(str_fields))
 
 def convert_explicit_path_hops_to_connections(
-    path_hops : List[Dict], device_dict : Dict[str, Tuple[Dict, Device]], main_connection_uuid : str
-) -> List[Tuple[str, DeviceLayerEnum, List[str], List[str]]]:
+    path_hops : List[Dict], device_dict : Dict[str, Tuple[Dict, Device]],
+    main_service_uuid : str, main_service_type : ServiceTypeEnum
+) -> List[Tuple[str, int, List[str], List[str]]]:
 
     connection_stack = queue.LifoQueue()
-    connections : List[Tuple[str, DeviceLayerEnum, List[str], List[str]]] = list()
-    old_device_layer = None
-    last_device_uuid = None
+    connections : List[Tuple[str, int, List[str], List[str]]] = list()
+    prv_device_uuid = None
+    prv_device_type = None
+    prv_manager_uuid = None
+
     for path_hop in path_hops:
         device_uuid = path_hop['device']
-        if last_device_uuid == device_uuid: continue
+        if prv_device_uuid == device_uuid: continue
         device_tuple = device_dict.get(device_uuid)
         if device_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_uuid)))
-        json_device,_ = device_tuple
-        device_type = json_device['device_type']
-        device_layer = DEVICE_TYPE_TO_LAYER.get(device_type)
-        if device_layer is None: raise Exception('Undefined Layer for DeviceType({:s})'.format(str(device_type)))
-
-        if old_device_layer is None:
-            # path ingress
-            connection_stack.put((main_connection_uuid, device_layer, [path_hop], []))
-        elif old_device_layer > device_layer:
-            # underlying connection begins
+        _,grpc_device = device_tuple
+
+        manager_uuid = get_device_manager_uuid(grpc_device)
+        device_type = get_device_type(grpc_device, device_dict, manager_uuid)
+        action = get_action(prv_device_type, prv_manager_uuid, device_type, manager_uuid)
+
+        if action == StackActionEnum.PATH_INGRESS:
+            connection_stack.put((main_service_uuid, main_service_type, [path_hop], []))
+        elif action == StackActionEnum.CREATE_CONNECTION:
             connection_uuid = str(uuid.uuid4())
-            connection_stack.put((connection_uuid, device_layer, [path_hop], []))
-        elif old_device_layer == device_layer:
-            # same connection continues
+            prv_service_type = connection_stack.queue[-1][1]
+            service_type = get_service_type(device_type, prv_service_type)
+            connection_stack.put((connection_uuid, service_type, [path_hop], []))
+        elif action == StackActionEnum.APPEND_PATH_HOP:
             connection_stack.queue[-1][2].append(path_hop)
-        elif old_device_layer < device_layer:
-            # underlying connection ended
+        elif action == StackActionEnum.CHAIN_CONNECTION:
+            connection = connection_stack.get()
+            connections.append(connection)
+            connection_stack.queue[-1][3].append(connection[0])
+
+            connection_uuid = str(uuid.uuid4())
+            prv_service_type = connection_stack.queue[-1][1]
+            service_type = get_service_type(device_type, prv_service_type)
+            connection_stack.put((connection_uuid, service_type, [path_hop], []))
+        elif action == StackActionEnum.TERMINATE_CONNECTION:
             connection = connection_stack.get()
             connections.append(connection)
             connection_stack.queue[-1][3].append(connection[0])
@@ -87,8 +207,9 @@ def convert_explicit_path_hops_to_connections(
         else:
             raise Exception('Uncontrolled condition')
 
-        old_device_layer = device_layer
-        last_device_uuid = device_uuid
+        prv_device_uuid = device_uuid
+        prv_device_type = device_type
+        prv_manager_uuid = manager_uuid
 
     # path egress
     connections.append(connection_stack.get())
@@ -96,17 +217,17 @@ def convert_explicit_path_hops_to_connections(
     return connections
 
 def convert_explicit_path_hops_to_plain_connection(
-    path_hops : List[Dict], main_connection_uuid : str
-) -> List[Tuple[str, DeviceLayerEnum, List[str], List[str]]]:
+    path_hops : List[Dict], main_service_uuid : str, main_service_type : ServiceTypeEnum
+) -> List[Tuple[str, int, List[str], List[str]]]:
 
-    connection : Tuple[str, DeviceLayerEnum, List[str], List[str]] = \
-        (main_connection_uuid, DeviceLayerEnum.PACKET_DEVICE, [], [])
+    connection : Tuple[str, int, List[str], List[str]] = \
+        (main_service_uuid, main_service_type, [], [])
 
-    last_device_uuid = None
+    prv_device_uuid = None
     for path_hop in path_hops:
         device_uuid = path_hop['device']
-        if last_device_uuid == device_uuid: continue
+        if prv_device_uuid == device_uuid: continue
         connection[2].append(path_hop)
-        last_device_uuid = device_uuid
+        prv_device_uuid = device_uuid
 
     return [connection]
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py b/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py
index cd1956a87..bd06e6ba1 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ConstantsMappings.py
@@ -13,8 +13,6 @@
 # limitations under the License.
 
 from enum import IntEnum
-from common.DeviceTypes import DeviceTypeEnum
-from common.proto.context_pb2 import ServiceTypeEnum
 
 class CapacityUnit(IntEnum):
     TB   = 0
@@ -66,50 +64,3 @@ class LinkForwardingDirection(IntEnum):
     BIDIRECTIONAL  = 0
     UNIDIRECTIONAL = 1
     UNKNOWN        = 2
-
-class DeviceLayerEnum(IntEnum):
-    APPLICATION_CONTROLLER = 41     # Layer 4 domain controller
-    APPLICATION_DEVICE     = 40     # Layer 4 domain device
-    PACKET_CONTROLLER      = 31     # Layer 3 domain controller
-    PACKET_DEVICE          = 30     # Layer 3 domain device
-    MAC_LAYER_CONTROLLER   = 21     # Layer 2 domain controller
-    MAC_LAYER_DEVICE       = 20     # Layer 2 domain device
-    OPTICAL_CONTROLLER     =  1     # Layer 0 domain controller
-    OPTICAL_DEVICE         =  0     # Layer 0 domain device
-
-DEVICE_TYPE_TO_LAYER = {
-    DeviceTypeEnum.EMULATED_DATACENTER.value             : DeviceLayerEnum.APPLICATION_DEVICE,
-    DeviceTypeEnum.DATACENTER.value                      : DeviceLayerEnum.APPLICATION_DEVICE,
-    DeviceTypeEnum.NETWORK.value                         : DeviceLayerEnum.APPLICATION_DEVICE,
-
-    DeviceTypeEnum.EMULATED_PACKET_ROUTER.value          : DeviceLayerEnum.PACKET_DEVICE,
-    DeviceTypeEnum.PACKET_ROUTER.value                   : DeviceLayerEnum.PACKET_DEVICE,
-    DeviceTypeEnum.EMULATED_PACKET_SWITCH.value          : DeviceLayerEnum.MAC_LAYER_DEVICE,
-    DeviceTypeEnum.PACKET_SWITCH.value                   : DeviceLayerEnum.MAC_LAYER_DEVICE,
-
-    DeviceTypeEnum.EMULATED_P4_SWITCH.value              : DeviceLayerEnum.MAC_LAYER_DEVICE,
-    DeviceTypeEnum.P4_SWITCH.value                       : DeviceLayerEnum.MAC_LAYER_DEVICE,
-
-    DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM.value : DeviceLayerEnum.MAC_LAYER_CONTROLLER,
-    DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM.value          : DeviceLayerEnum.MAC_LAYER_CONTROLLER,
-
-    DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value       : DeviceLayerEnum.OPTICAL_CONTROLLER,
-    DeviceTypeEnum.OPEN_LINE_SYSTEM.value                : DeviceLayerEnum.OPTICAL_CONTROLLER,
-    DeviceTypeEnum.XR_CONSTELLATION.value                : DeviceLayerEnum.OPTICAL_CONTROLLER,
-
-    DeviceTypeEnum.EMULATED_OPTICAL_ROADM.value          : DeviceLayerEnum.OPTICAL_DEVICE,
-    DeviceTypeEnum.OPTICAL_ROADM.value                   : DeviceLayerEnum.OPTICAL_DEVICE,
-    DeviceTypeEnum.EMULATED_OPTICAL_TRANSPONDER.value    : DeviceLayerEnum.OPTICAL_DEVICE,
-    DeviceTypeEnum.OPTICAL_TRANSPONDER.value             : DeviceLayerEnum.OPTICAL_DEVICE,
-}
-
-DEVICE_LAYER_TO_SERVICE_TYPE = {
-    DeviceLayerEnum.APPLICATION_DEVICE.value   : ServiceTypeEnum.SERVICETYPE_L3NM,
-    DeviceLayerEnum.PACKET_DEVICE.value        : ServiceTypeEnum.SERVICETYPE_L3NM,
-
-    DeviceLayerEnum.MAC_LAYER_CONTROLLER.value : ServiceTypeEnum.SERVICETYPE_L2NM,
-    DeviceLayerEnum.MAC_LAYER_DEVICE.value     : ServiceTypeEnum.SERVICETYPE_L2NM,
-
-    DeviceLayerEnum.OPTICAL_CONTROLLER.value   : ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE,
-    DeviceLayerEnum.OPTICAL_DEVICE.value       : ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE,
-}
-- 
GitLab


From 5ff2ecb993c731189ea1309012f11bd07b9207ac Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 21:43:47 +0000
Subject: [PATCH 159/229] Updated TODO file

---
 TODO.txt | 37 ++++++++++++++++++++++++++++---------
 1 file changed, 28 insertions(+), 9 deletions(-)

diff --git a/TODO.txt b/TODO.txt
index 343d54e28..714fab583 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -1,9 +1,28 @@
-- confirm with Hakim everything is in branch hakim-develop-patch-44885
-- merge branch hakim-develop-patch-44885 into feat/device-ietf-l2vpn
-- delete branch hakim-develop-patch-44885
-
-- update OFC'23 to deploy 2 instances without blockchain
-dom1 => parent
-dom2 => child
-dom3/4 => remove
-replace nfvsdn22 => ofc23
+- MW mock sdn ctrl: post does not work
+- implement mock IPM controller
+
+- pending infinera tests
+- test with Slice NBI
+- integrate Slice NBI in Load Gen
+- import subdevices TAPI, MW, INF
+
+- Device:
+    - IetfL2VpnDriver should not import links; otherwise, might confuse path computation component
+        - [] Add flag to control that
+    - MW Driver should import topology, there should be nothing between antennas
+    - IPM Driver should import devices but not links, TAPI in between
+    - TAPI Driver: add flag to choose; might be required in some cases
+    - enbale to create links (connectivity between subdevices)
+
+- OLS service: from input to input endpoint ??
+
+- pathcomp should not create reversed links
+- bidirectional links should be duplicated in frontend
+- pathcomp should honor input/output of tapi endpoints
+
+TO TEST:
+- Test with new changes in pathcomp and subservice config rule composition
+- Test device manager config in device works; rules should go to manager, not to underlying
+- ietf-l2vpn driver: test service is created
+- if there is a config rule for a endpoint in subservice, move the rule from main to that subservice
+
-- 
GitLab


From a23c62f5330f30889464757eead3cba778aaaa1b Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 21:44:03 +0000
Subject: [PATCH 160/229] Manifests:

- updated log level to debug
---
 manifests/deviceservice.yaml   | 2 +-
 manifests/pathcompservice.yaml | 2 +-
 manifests/serviceservice.yaml  | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/manifests/deviceservice.yaml b/manifests/deviceservice.yaml
index ca2c81f0f..ddcc997cd 100644
--- a/manifests/deviceservice.yaml
+++ b/manifests/deviceservice.yaml
@@ -36,7 +36,7 @@ spec:
         - containerPort: 9192
         env:
         - name: LOG_LEVEL
-          value: "INFO"
+          value: "DEBUG"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:2020"]
diff --git a/manifests/pathcompservice.yaml b/manifests/pathcompservice.yaml
index fd3599f42..5916d09a6 100644
--- a/manifests/pathcompservice.yaml
+++ b/manifests/pathcompservice.yaml
@@ -36,7 +36,7 @@ spec:
         - containerPort: 9192
         env:
         - name: LOG_LEVEL
-          value: "INFO"
+          value: "DEBUG"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:10020"]
diff --git a/manifests/serviceservice.yaml b/manifests/serviceservice.yaml
index 3fa4a6e0d..801c06f52 100644
--- a/manifests/serviceservice.yaml
+++ b/manifests/serviceservice.yaml
@@ -36,7 +36,7 @@ spec:
         - containerPort: 9192
         env:
         - name: LOG_LEVEL
-          value: "INFO"
+          value: "DEBUG"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:3030"]
-- 
GitLab


From 9a8a1a348155015bb4ceddef4709ebf17d6dc44b Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Feb 2023 21:44:58 +0000
Subject: [PATCH 161/229] Added simple test to check pathcomp subservice
 composition

---
 test_pathcomp/ComputeSubServices.py | 255 ++++++++++++++++++++++++++++
 test_pathcomp/__init__.py           |  14 ++
 test_pathcomp/__main__.py           |  33 ++++
 test_pathcomp/data.py               | 115 +++++++++++++
 test_pathcomp/format.sh             |  56 ++++++
 5 files changed, 473 insertions(+)
 create mode 100644 test_pathcomp/ComputeSubServices.py
 create mode 100644 test_pathcomp/__init__.py
 create mode 100644 test_pathcomp/__main__.py
 create mode 100644 test_pathcomp/data.py
 create mode 100755 test_pathcomp/format.sh

diff --git a/test_pathcomp/ComputeSubServices.py b/test_pathcomp/ComputeSubServices.py
new file mode 100644
index 000000000..e0b229625
--- /dev/null
+++ b/test_pathcomp/ComputeSubServices.py
@@ -0,0 +1,255 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Convert the path defined as explicit hops with ingress and egress endpoints per device into a set of connections and
+# compute the dependencies among them.
+#
+# Example:
+# o-- int DC1 eth1 -- 10/1 CS1 1/2 -- 1/2 R2 2/1 -- a7.. OLS 60.. -- 2/1 R3 1/1 -- 1/1 CS2 10/1 -- eth1 DC2 int --o
+#         APP              PKT            PKT            CTRL            PKT           PKT              APP
+#
+# path_hops = [
+#     {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
+#     {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
+#     {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
+#     {'device': 'TN-OLS', 'ingress_ep': 'a7a80b23a703', 'egress_ep': '60519106029e'},
+#     {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
+#     {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'},
+#     {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
+# ]
+#
+# connections=[
+#     (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), <DeviceLayerEnum.OPTICAL_CONTROLLER: 1>, [
+#             {'device': 'TN-OLS', 'ingress_ep': '833760219d0f', 'egress_ep': 'cf176771a4b9'}
+#         ], []),
+#     (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), <DeviceLayerEnum.PACKET_DEVICE: 30>, [
+#             {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
+#             {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
+#             {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
+#             {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'}
+#         ], [UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e')]),
+#     (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), <DeviceLayerEnum.APPLICATION_DEVICE: 40>, [
+#             {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
+#             {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
+#         ], [UUID('c2e57966-5d82-4705-a5fe-44cf6487219e')])
+# ]
+
+import enum, json, queue, uuid
+from typing import Dict, List, Optional, Tuple
+from common.DeviceTypes import DeviceTypeEnum
+from common.proto.context_pb2 import Device, ServiceTypeEnum #, DeviceDriverEnum as grpc_DeviceDriverEnum
+#from .ConstantsMappings import DEVICE_TYPE_TO_LAYER, DeviceLayerEnum
+
+class StackActionEnum(enum.Enum):
+    PATH_INGRESS         = 'ingress'
+    CREATE_CONNECTION    = 'create'
+    APPEND_PATH_HOP      = 'append'
+    CHAIN_CONNECTION     = 'chain'
+    TERMINATE_CONNECTION = 'terminate'
+
+#class DeviceDriverEnum(enum.IntEnum):
+#    EMULATED              = grpc_DeviceDriverEnum.DEVICEDRIVER_UNDEFINED
+#    OPENCONFIG            = grpc_DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG
+#    TRANSPORT_API         = grpc_DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API
+#    P4                    = grpc_DeviceDriverEnum.DEVICEDRIVER_P4
+#    IETF_NETWORK_TOPOLOGY = grpc_DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY
+#    ONF_TR_352            = grpc_DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352
+#    XR                    = grpc_DeviceDriverEnum.DEVICEDRIVER_XR
+#    IETF_L2VPN            = grpc_DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN
+
+def is_datacenter(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.DATACENTER, DeviceTypeEnum.EMULATED_DATACENTER}
+
+def is_packet_router(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.PACKET_ROUTER, DeviceTypeEnum.EMULATED_PACKET_ROUTER}
+
+def is_packet_switch(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH}
+
+def is_packet_device(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return is_packet_router(dev_type) or is_packet_switch(dev_type)
+
+def is_tfs_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.TERAFLOWSDN_CONTROLLER}
+
+def is_mw_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM, DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM}
+
+def is_ipm_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.XR_CONSTELLATION, DeviceTypeEnum.EMULATED_XR_CONSTELLATION}
+
+def is_ols_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
+    return dev_type in {DeviceTypeEnum.OPEN_LINE_SYSTEM, DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM}
+
+def is_subdevice(dev_manager : Optional[str]) -> bool:
+    return dev_manager is not None
+
+def is_subdevice_equal(dev_manager_a : Optional[str], dev_manager_b : Optional[str]) -> bool:
+    if dev_manager_a is None and dev_manager_b is None: return True
+    if dev_manager_a is not None and dev_manager_b is not None: return dev_manager_a == dev_manager_b
+    return False
+
+#def has_driver(dev_drivers : List[DeviceDriverEnum], dev_driver : DeviceDriverEnum) -> bool:
+#    return dev_driver in dev_drivers
+
+def get_action(
+    prv_type : Optional[DeviceTypeEnum], prv_manager : Optional[str],
+    cur_type : DeviceTypeEnum, cur_manager : Optional[str]
+) -> StackActionEnum:
+    if prv_type is None:
+        return StackActionEnum.PATH_INGRESS
+
+    if is_datacenter(prv_type):
+        if is_packet_device(cur_type): return StackActionEnum.CREATE_CONNECTION
+        if is_tfs_controller(cur_type): return StackActionEnum.CREATE_CONNECTION
+
+    if is_packet_device(prv_type):
+        if is_datacenter(cur_type): return StackActionEnum.TERMINATE_CONNECTION
+        if is_packet_device(cur_type):
+            if is_subdevice_equal(cur_manager, prv_manager): return StackActionEnum.APPEND_PATH_HOP
+            if is_subdevice(prv_manager) and not is_subdevice(cur_manager): return StackActionEnum.TERMINATE_CONNECTION
+            if not is_subdevice(prv_manager) and is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
+
+        if is_mw_controller(cur_type) and not is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
+        if is_ols_controller(cur_type) and not is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
+        if is_tfs_controller(cur_type) and is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
+
+    if is_mw_controller(prv_type) or is_ols_controller(prv_type):
+        if is_packet_device(cur_type): return StackActionEnum.TERMINATE_CONNECTION
+
+    if is_tfs_controller(prv_type):
+        if is_tfs_controller(cur_type) and is_subdevice_equal(prv_manager, cur_manager): return StackActionEnum.APPEND_PATH_HOP
+        if is_datacenter(cur_type): return StackActionEnum.TERMINATE_CONNECTION
+        if is_packet_device(cur_type): return StackActionEnum.TERMINATE_CONNECTION
+        if is_mw_controller(cur_type) or is_ols_controller(cur_type): return StackActionEnum.CHAIN_CONNECTION
+
+    str_fields = ', '.join([
+        'prv_type={:s}'.format(str(prv_type)), 'prv_manager={:s}'.format(str(prv_manager)),
+        'cur_type={:s}'.format(str(cur_type)), 'cur_manager={:s}'.format(str(cur_manager)),
+    ])
+    raise Exception('Undefined Action for ({:s})'.format(str_fields))
+
+def get_device_manager_uuid(device : Device) -> Optional[str]:
+    for config_rule in device.device_config.config_rules:
+        if config_rule.WhichOneof('config_rule') != 'custom': continue
+        if config_rule.custom.resource_key != '_manager': continue
+        device_manager_id = json.loads(config_rule.custom.resource_value)
+        return device_manager_id['uuid']
+    return None
+
+def get_device_type(
+    grpc_device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_manager_uuid : Optional[str]
+) -> DeviceTypeEnum:
+    if device_manager_uuid is None:
+        return DeviceTypeEnum._value2member_map_[grpc_device.device_type] # pylint: disable=no-member
+    device_manager_tuple = device_dict.get(device_manager_uuid)
+    if device_manager_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_manager_uuid)))
+    _,grpc_device = device_manager_tuple
+    return DeviceTypeEnum._value2member_map_[grpc_device.device_type] # pylint: disable=no-member
+
+    #manager_drivers = set(grpc_device.device_drivers)
+    #if DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN in manager_drivers:
+    #    device_layer = DeviceLayerEnum.MAC_LAYER_CONTROLLER
+    #else:
+    #    device_type = json_device['device_type']
+    #    device_layer = DEVICE_TYPE_TO_LAYER.get(device_type)
+    #    if device_layer is None: raise Exception('Undefined Layer for DeviceType({:s})'.format(str(device_type)))
+
+SERVICE_TYPE_LXNM = {ServiceTypeEnum.SERVICETYPE_L3NM, ServiceTypeEnum.SERVICETYPE_L2NM}
+
+def get_service_type(device_type : DeviceTypeEnum, prv_service_type : ServiceTypeEnum) -> ServiceTypeEnum:
+    if is_tfs_controller(device_type) or is_packet_router(device_type):
+        if prv_service_type in SERVICE_TYPE_LXNM: return prv_service_type
+    if is_packet_switch(device_type) or is_mw_controller(device_type):
+        if prv_service_type == ServiceTypeEnum.SERVICETYPE_L2NM: return prv_service_type
+    if is_ols_controller(device_type) or is_ipm_controller(device_type):
+        return ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE
+
+    str_fields = ', '.join([
+        'device_type={:s}'.format(str(device_type)),
+    ])
+    raise Exception('Undefined Service Type for ({:s})'.format(str_fields))
+
+def convert_explicit_path_hops_to_connections(
+    path_hops : List[Dict], device_dict : Dict[str, Tuple[Dict, Device]],
+    main_service_uuid : str, main_service_type : ServiceTypeEnum
+) -> List[Tuple[str, int, List[str], List[str]]]:
+
+    connection_stack = queue.LifoQueue()
+    connections : List[Tuple[str, int, List[str], List[str]]] = list()
+    prv_device_uuid = None
+    prv_device_type = None
+    prv_manager_uuid = None
+
+    for path_hop in path_hops:
+        device_uuid = path_hop['device']
+        if prv_device_uuid == device_uuid: continue
+        device_tuple = device_dict.get(device_uuid)
+        if device_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_uuid)))
+        _,grpc_device = device_tuple
+
+        manager_uuid = get_device_manager_uuid(grpc_device)
+        device_type = get_device_type(grpc_device, device_dict, manager_uuid)
+        action = get_action(prv_device_type, prv_manager_uuid, device_type, manager_uuid)
+
+        if action == StackActionEnum.PATH_INGRESS:
+            connection_stack.put((main_service_uuid, main_service_type, [path_hop], []))
+        elif action == StackActionEnum.CREATE_CONNECTION:
+            connection_uuid = str(uuid.uuid4())
+            prv_service_type = connection_stack.queue[-1][1]
+            service_type = get_service_type(device_type, prv_service_type)
+            connection_stack.put((connection_uuid, service_type, [path_hop], []))
+        elif action == StackActionEnum.APPEND_PATH_HOP:
+            connection_stack.queue[-1][2].append(path_hop)
+        elif action == StackActionEnum.CHAIN_CONNECTION:
+            connection = connection_stack.get()
+            connections.append(connection)
+            connection_stack.queue[-1][3].append(connection[0])
+
+            connection_uuid = str(uuid.uuid4())
+            prv_service_type = connection_stack.queue[-1][1]
+            service_type = get_service_type(device_type, prv_service_type)
+            connection_stack.put((connection_uuid, service_type, [path_hop], []))
+        elif action == StackActionEnum.TERMINATE_CONNECTION:
+            connection = connection_stack.get()
+            connections.append(connection)
+            connection_stack.queue[-1][3].append(connection[0])
+            connection_stack.queue[-1][2].append(path_hop)
+        else:
+            raise Exception('Uncontrolled condition')
+
+        prv_device_uuid = device_uuid
+        prv_device_type = device_type
+        prv_manager_uuid = manager_uuid
+
+    # path egress
+    connections.append(connection_stack.get())
+    assert connection_stack.empty()
+    return connections
+
+def convert_explicit_path_hops_to_plain_connection(
+    path_hops : List[Dict], main_service_uuid : str, main_service_type : ServiceTypeEnum
+) -> List[Tuple[str, int, List[str], List[str]]]:
+
+    connection : Tuple[str, int, List[str], List[str]] = \
+        (main_service_uuid, main_service_type, [], [])
+
+    prv_device_uuid = None
+    for path_hop in path_hops:
+        device_uuid = path_hop['device']
+        if prv_device_uuid == device_uuid: continue
+        connection[2].append(path_hop)
+        prv_device_uuid = device_uuid
+
+    return [connection]
diff --git a/test_pathcomp/__init__.py b/test_pathcomp/__init__.py
new file mode 100644
index 000000000..1549d9811
--- /dev/null
+++ b/test_pathcomp/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
diff --git a/test_pathcomp/__main__.py b/test_pathcomp/__main__.py
new file mode 100644
index 000000000..6af584fe9
--- /dev/null
+++ b/test_pathcomp/__main__.py
@@ -0,0 +1,33 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import logging, sys
+from common.proto.context_pb2 import ServiceTypeEnum
+from .data import path_hops, device_dict
+from .ComputeSubServices import convert_explicit_path_hops_to_connections
+
+logging.basicConfig(level=logging.DEBUG)
+LOGGER = logging.getLogger(__name__)
+
+def main():
+    service_uuid = 'dc-2-dc-svc'
+    service_type = ServiceTypeEnum.SERVICETYPE_L2NM
+    connections = convert_explicit_path_hops_to_connections(path_hops, device_dict, service_uuid, service_type)
+    str_connections = '\n'.join(['  ' + str(connection) for connection in connections])
+    LOGGER.debug('connections = [\n{:s}\n]'.format(str_connections))
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/test_pathcomp/data.py b/test_pathcomp/data.py
new file mode 100644
index 000000000..5e94d969e
--- /dev/null
+++ b/test_pathcomp/data.py
@@ -0,0 +1,115 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import json
+from typing import Dict, Tuple
+from common.proto.context_pb2 import ConfigActionEnum, Device
+
+path_hops = [
+    {'device': 'DC1', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
+    {'device': 'PE1', 'ingress_ep': '1/1', 'egress_ep': '1/2'},
+    {'device': 'MW1-2', 'ingress_ep': '172.18.0.1:1', 'egress_ep': '172.18.0.2:1'},
+    {'device': 'R1', 'ingress_ep': '1/1', 'egress_ep': '1/3'},
+    {'device': 'OLS', 'ingress_ep': 'aade6001-f00b-5e2f-a357-6a0a9d3de870', 'egress_ep': '0ef74f99-1acc-57bd-ab9d-4b958b06c513'},
+    {'device': 'R2', 'ingress_ep': '1/1', 'egress_ep': '1/2'},
+    {'device': 'PE3', 'ingress_ep': '1/1', 'egress_ep': '1/2'},
+    {'device': 'DC2', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
+]
+
+device_dict = {
+    'R3': {'device_Id': 'R3', 'device_type': 'emu-packet-router', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'R3', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'R3', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'}
+    ]},
+    'PE4': {'device_Id': 'PE4', 'device_type': 'emu-packet-router', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'PE4', 'endpoint_uuid': 'mgmt'}, 'endpoint_type': 'mgmt'},
+        {'endpoint_id': {'device_id': 'PE4', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'PE4', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'}
+    ]},
+    'PE2': {'device_Id': 'PE2', 'device_type': 'emu-packet-router', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'PE2', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'PE2', 'endpoint_uuid': 'mgmt'}, 'endpoint_type': 'mgmt'},
+        {'endpoint_id': {'device_id': 'PE2', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'}
+    ]},
+    'R1': {'device_Id': 'R1', 'device_type': 'emu-packet-router', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'R1', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'R1', 'endpoint_uuid': '1/3'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'R1', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'}
+    ]},
+    'PE3': {'device_Id': 'PE3', 'device_type': 'emu-packet-router', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'PE3', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'PE3', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'PE3', 'endpoint_uuid': 'mgmt'}, 'endpoint_type': 'mgmt'}
+    ]},
+    'OLS': {'device_Id': 'OLS', 'device_type': 'emu-open-line-system', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'OLS', 'endpoint_uuid': '0ef74f99-1acc-57bd-ab9d-4b958b06c513'}, 'endpoint_type': 'optical'},
+        {'endpoint_id': {'device_id': 'OLS', 'endpoint_uuid': '50296d99-58cc-5ce7-82f5-fc8ee4eec2ec'}, 'endpoint_type': 'optical'},
+        {'endpoint_id': {'device_id': 'OLS', 'endpoint_uuid': 'aade6001-f00b-5e2f-a357-6a0a9d3de870'}, 'endpoint_type': 'optical'},
+        {'endpoint_id': {'device_id': 'OLS', 'endpoint_uuid': 'eb287d83-f05e-53ec-ab5a-adf6bd2b5418'}, 'endpoint_type': 'optical'}
+    ]},
+    'PE1': {'device_Id': 'PE1', 'device_type': 'emu-packet-router', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'PE1', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'PE1', 'endpoint_uuid': 'mgmt'}, 'endpoint_type': 'mgmt'},
+        {'endpoint_id': {'device_id': 'PE1', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'}
+    ]},
+    'DC2': {'device_Id': 'DC2', 'device_type': 'emu-datacenter', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'DC2', 'endpoint_uuid': 'eth1'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'DC2', 'endpoint_uuid': 'eth2'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'DC2', 'endpoint_uuid': 'int'}, 'endpoint_type': 'copper/internal'}
+    ]},
+    'MW1-2': {'device_Id': 'MW1-2', 'device_type': 'emu-microwave-radio-system', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'MW1-2', 'endpoint_uuid': '172.18.0.1:1'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'MW1-2', 'endpoint_uuid': '172.18.0.2:1'}, 'endpoint_type': 'copper/internal'}
+    ]},
+    'MW3-4': {'device_Id': 'MW3-4', 'device_type': 'emu-microwave-radio-system', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'MW3-4', 'endpoint_uuid': '172.18.0.3:1'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'MW3-4', 'endpoint_uuid': '172.18.0.4:1'}, 'endpoint_type': 'copper/internal'}
+    ]},
+    'TFS': {'device_Id': 'TFS', 'device_type': 'teraflowsdn', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'TFS', 'endpoint_uuid': 'mgmt'}, 'endpoint_type': 'mgmt'}
+    ]},
+    'R2': {'device_Id': 'R2', 'device_type': 'emu-packet-router', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'R2', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'R2', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'}
+    ]},
+    'DC1': {'device_Id': 'DC1', 'device_type': 'emu-datacenter', 'device_endpoints': [
+        {'endpoint_id': {'device_id': 'DC1', 'endpoint_uuid': 'int'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'DC1', 'endpoint_uuid': 'eth1'}, 'endpoint_type': 'copper/internal'},
+        {'endpoint_id': {'device_id': 'DC1', 'endpoint_uuid': 'eth2'}, 'endpoint_type': 'copper/internal'}
+    ]},
+}
+
+MANAGED_DEVICES = {'PE1', 'PE2', 'PE3', 'PE4'}
+MANAGER = 'TFS'
+
+def process_device(json_device) -> Tuple[Dict, Device]:
+    device_uuid = json_device['device_Id']
+
+    grpc_device = Device()
+    grpc_device.device_id.device_uuid.uuid = device_uuid
+    grpc_device.device_type = json_device['device_type']
+
+    if device_uuid in MANAGED_DEVICES:
+        config_rule = grpc_device.device_config.config_rules.add()
+        config_rule.action = ConfigActionEnum.CONFIGACTION_SET
+        config_rule.custom.resource_key = '_manager'
+        config_rule.custom.resource_value = json.dumps({'uuid': MANAGER})
+
+    return json_device, grpc_device
+
+device_dict = {
+    device_uuid:process_device(json_device)
+    for device_uuid,json_device in device_dict.items()
+}
diff --git a/test_pathcomp/format.sh b/test_pathcomp/format.sh
new file mode 100755
index 000000000..ceeea5d31
--- /dev/null
+++ b/test_pathcomp/format.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+sed -i 's#0dff8c06-873b-5799-ac54-c0452252bae1#R3#g' log.txt
+sed -i 's#1102e0b5-824b-57eb-86a1-d247e2deaf68#PE4#g' log.txt
+sed -i 's#29d766ca-d222-5257-bab3-6a060719270a#PE2#g' log.txt
+sed -i 's#68741528-2e94-5274-ab3c-fddcd8dc05ef#R1#g' log.txt
+sed -i 's#69a3a3f0-5237-5f9e-bc96-d450d0c6c02a#PE3#g' log.txt
+sed -i 's#6ab8fa38-ec20-5c32-8d9b-4fd86fce2555#OLS#g' log.txt
+sed -i 's#7faa13eb-903d-58f5-936b-1a1174fe98fd#PE1#g' log.txt
+sed -i 's#800d5bd4-a7a3-5a66-82ab-d399767ca3d8#DC2#g' log.txt
+sed -i 's#90c22ce2-4f8d-51b4-8d7a-762eea9b310a#MW#g' log.txt
+sed -i 's#a23cdc36-074d-5423-8abd-4a167a6e6fbc#TFS#g' log.txt
+sed -i 's#c944aaeb-bbdf-5f2d-b31c-8cc8903045b6#R2#g' log.txt
+sed -i 's#cda90d2f-e7b0-5837-8f2e-2fb29dd9b367#DC1#g' log.txt
+sed -i 's#79f4184c-d375-5e2c-a3df-1ae64537c95c#1/1#g' log.txt
+sed -i 's#93c853c2-429c-52e8-9ba9-454fcedb9090#1/2#g' log.txt
+sed -i 's#1fe2ee1a-fe92-57c9-afd9-260e6f0ecc54#mgmt#g' log.txt
+sed -i 's#cd378805-d73e-5681-8514-1d33e656c0e9#1/1#g' log.txt
+sed -i 's#e502e939-3ab8-5fee-8277-7fd1c1c0fa93#1/2#g' log.txt
+sed -i 's#780f6929-a863-5e6a-a046-3dac2e24bf58#1/1#g' log.txt
+sed -i 's#f1082088-a304-587b-a230-b8ce10e5a148#mgmt#g' log.txt
+sed -i 's#ffdfb0ce-1684-5d39-bad3-9ff1eb4ffbf8#1/2#g' log.txt
+sed -i 's#268b735d-c861-5319-88a4-2ea498f96a04#1/1#g' log.txt
+sed -i 's#62c0cba1-9ee8-5db5-82da-ce96d7e0f39f#1/3#g' log.txt
+sed -i 's#7d1bf45c-5ab2-525e-87a4-c0ddcd5c18e4#1/2#g' log.txt
+sed -i 's#2b11934b-dfd7-5267-87b9-7306a24e0182#1/1#g' log.txt
+sed -i 's#ca92338e-2038-5d74-8ef1-2b20a234a8b9#1/2#g' log.txt
+sed -i 's#f8955e74-4e93-5d43-a968-9626ee5c9b53#mgmt#g' log.txt
+sed -i 's#2b75d88d-095f-5752-a10a-1ff69df8008d#1/2#g' log.txt
+sed -i 's#bf0d75db-acf8-53cb-b6db-32d9dc0878c4#mgmt#g' log.txt
+sed -i 's#eeade85a-03df-55d2-bfc2-2af7267bbcf3#1/1#g' log.txt
+sed -i 's#06bb0b92-8783-5599-aa20-15bfbe241348#eth1#g' log.txt
+sed -i 's#6a6859c3-4a13-513c-a7dd-490c8b2931b1#eth2#g' log.txt
+sed -i 's#97f57787-cfec-5315-9718-7e850905f11a#int#g' log.txt
+sed -i 's#659c63c9-9197-54a2-af34-48275e736aac#192.168.27.140:8#g' log.txt
+sed -i 's#fed79944-3444-54ee-8335-efbe6590434b#192.168.27.139:10#g' log.txt
+sed -i 's#85bb83b0-8d96-5e76-9959-97c35036d4f9#mgmt#g' log.txt
+sed -i 's#313fb1ed-5dee-5e49-884a-cbb3b1e00073#1/2#g' log.txt
+sed -i 's#79699f56-df25-5188-a389-04606c24fbfc#1/1#g' log.txt
+sed -i 's#37ab67ef-0064-54e3-ae9b-d40100953834#int#g' log.txt
+sed -i 's#55e88b6b-ccf7-538f-a062-a41219292ea1#eth1#g' log.txt
+sed -i 's#68b5972b-3630-53a8-ba9b-cc54dd31f8b8#eth2#g' log.txt
-- 
GitLab


From a7acb1bc8727a1cf961eed590751bdce2019b008 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 27 Feb 2023 08:41:53 +0000
Subject: [PATCH 162/229] Test Tools - MW Mock SDN Ctrl:

- Corrected processing of POST/DELETE messages
- Added test script
---
 .../tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py   | 53 ++++--------
 src/tests/tools/mock_mw_sdn_ctrl/test_mw.py   | 84 +++++++++++++++++++
 2 files changed, 101 insertions(+), 36 deletions(-)
 create mode 100644 src/tests/tools/mock_mw_sdn_ctrl/test_mw.py

diff --git a/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
index d4aabbe5b..d3d9de4a2 100644
--- a/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
+++ b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
@@ -25,8 +25,7 @@
 # Ref: https://blog.miguelgrinberg.com/post/designing-a-restful-api-using-flask-restful
 
 import functools, logging, sys, time
-from flask import Flask, abort, request
-from flask.json import jsonify
+from flask import Flask, abort, jsonify, make_response, request
 from flask_restful import Api, Resource
 
 BIND_ADDRESS = '0.0.0.0'
@@ -77,55 +76,37 @@ def log_request(logger : logging.Logger, response):
     return response
 
 class Health(Resource):
-    def get(self): return jsonify({})
+    def get(self):
+        return make_response(jsonify({}), 200)
 
 class Network(Resource):
     def get(self, network_uuid : str):
         if network_uuid != 'SIAE-ETH-TOPOLOGY': abort(400)
         network = {'node': NETWORK_NODES, 'ietf-network-topology:link': NETWORK_LINKS}
-        return jsonify({'ietf-network:network': network})
+        return make_response(jsonify({'ietf-network:network': network}), 200)
 
 class Services(Resource):
     def get(self):
         services = [service for service in NETWORK_SERVICES.values()]
-        return jsonify({'ietf-eth-tran-service:etht-svc': {'etht-svc-instances': services}})
+        return make_response(jsonify({'ietf-eth-tran-service:etht-svc': {'etht-svc-instances': services}}), 200)
 
     def post(self):
-        LOGGER.info('[post] begin')
-        try:
-            json_request = request.get_json()
-            LOGGER.info('[post] json_request={:s}'.format(str(json_request)))
-            if not json_request:
-                LOGGER.info('[post] abort 1')
-                abort(400)
-            if not isinstance(json_request, dict):
-                LOGGER.info('[post] abort 2')
-                abort(400)
-            if 'etht-svc-instances' not in json_request:
-                LOGGER.info('[post] abort 3')
-                abort(400)
-            json_services = json_request['etht-svc-instances']
-            LOGGER.info('[post] json_services={:s}'.format(str(json_services)))
-            if not isinstance(json_services, list):
-                LOGGER.info('[post] abort 4')
-                abort(400)
-            if len(json_services) != 1:
-                LOGGER.info('[post] abort 5')
-                abort(400)
-            svc_data = json_services[0]
-            LOGGER.info('[post] svc_data={:s}'.format(str(svc_data)))
-            etht_svc_name = svc_data['etht-svc-name']
-            LOGGER.info('[post] etht_svc_name={:s}'.format(str(etht_svc_name)))
-            NETWORK_SERVICES[etht_svc_name] = svc_data
-            LOGGER.info('[post] done')
-            return jsonify({}), 201
-        except:
-            LOGGER.exception('Exception in POST')
+        json_request = request.get_json()
+        if not json_request: abort(400)
+        if not isinstance(json_request, dict): abort(400)
+        if 'etht-svc-instances' not in json_request: abort(400)
+        json_services = json_request['etht-svc-instances']
+        if not isinstance(json_services, list): abort(400)
+        if len(json_services) != 1: abort(400)
+        svc_data = json_services[0]
+        etht_svc_name = svc_data['etht-svc-name']
+        NETWORK_SERVICES[etht_svc_name] = svc_data
+        return make_response(jsonify({}), 201)
 
 class DelServices(Resource):
     def delete(self, service_uuid : str):
         NETWORK_SERVICES.pop(service_uuid, None)
-        return jsonify({}), 204
+        return make_response(jsonify({}), 204)
 
 def main():
     LOGGER.info('Starting...')
diff --git a/src/tests/tools/mock_mw_sdn_ctrl/test_mw.py b/src/tests/tools/mock_mw_sdn_ctrl/test_mw.py
new file mode 100644
index 000000000..0329d30ad
--- /dev/null
+++ b/src/tests/tools/mock_mw_sdn_ctrl/test_mw.py
@@ -0,0 +1,84 @@
+import json, logging, requests
+from requests.auth import HTTPBasicAuth
+from typing import Optional
+
+LOGGER = logging.getLogger(__name__)
+
+HTTP_OK_CODES = {
+    200,    # OK
+    201,    # Created
+    202,    # Accepted
+    204,    # No Content
+}
+
+def create_connectivity_service(
+    root_url, uuid, node_id_src, tp_id_src, node_id_dst, tp_id_dst, vlan_id,
+    auth : Optional[HTTPBasicAuth] = None, timeout : Optional[int] = None
+):
+
+    url = '{:s}/nmswebs/restconf/data/ietf-eth-tran-service:etht-svc'.format(root_url)
+    headers = {'content-type': 'application/json'}
+    data = {
+        'etht-svc-instances': [
+            {
+                'etht-svc-name': uuid,
+                'etht-svc-type': 'ietf-eth-tran-types:p2p-svc',
+                'etht-svc-end-points': [
+                    {
+                        'etht-svc-access-points': [
+                            {'access-node-id': node_id_src, 'access-ltp-id': tp_id_src, 'access-point-id': '1'}
+                        ],
+                        'outer-tag': {'vlan-value': vlan_id, 'tag-type': 'ietf-eth-tran-types:classify-c-vlan'},
+                        'etht-svc-end-point-name': '{:s}:{:s}'.format(str(node_id_src), str(tp_id_src)),
+                        'service-classification-type': 'ietf-eth-tran-types:vlan-classification'
+                    },
+                    {
+                        'etht-svc-access-points': [
+                            {'access-node-id': node_id_dst, 'access-ltp-id': tp_id_dst, 'access-point-id': '2'}
+                        ],
+                        'outer-tag': {'vlan-value': vlan_id, 'tag-type': 'ietf-eth-tran-types:classify-c-vlan'},
+                        'etht-svc-end-point-name': '{:s}:{:s}'.format(str(node_id_dst), str(tp_id_dst)),
+                        'service-classification-type': 'ietf-eth-tran-types:vlan-classification'
+                    }
+                ]
+            }
+        ]
+    }
+    results = []
+    try:
+        LOGGER.info('Connectivity service {:s}: {:s}'.format(str(uuid), str(data)))
+        response = requests.post(
+            url=url, data=json.dumps(data), timeout=timeout, headers=headers, verify=False, auth=auth)
+        LOGGER.info('Microwave Driver response: {:s}'.format(str(response)))
+    except Exception as e:  # pylint: disable=broad-except
+        LOGGER.exception('Exception creating ConnectivityService(uuid={:s}, data={:s})'.format(str(uuid), str(data)))
+        results.append(e)
+    else:
+        if response.status_code not in HTTP_OK_CODES:
+            msg = 'Could not create ConnectivityService(uuid={:s}, data={:s}). status_code={:s} reply={:s}'
+            LOGGER.error(msg.format(str(uuid), str(data), str(response.status_code), str(response)))
+        results.append(response.status_code in HTTP_OK_CODES)
+    return results
+
+def delete_connectivity_service(root_url, uuid, auth : Optional[HTTPBasicAuth] = None, timeout : Optional[int] = None):
+    url = '{:s}/nmswebs/restconf/data/ietf-eth-tran-service:etht-svc/etht-svc-instances={:s}'
+    url = url.format(root_url, uuid)
+    results = []
+    try:
+        response = requests.delete(url=url, timeout=timeout, verify=False, auth=auth)
+    except Exception as e:  # pylint: disable=broad-except
+        LOGGER.exception('Exception deleting ConnectivityService(uuid={:s})'.format(str(uuid)))
+        results.append(e)
+    else:
+        if response.status_code not in HTTP_OK_CODES:
+            msg = 'Could not delete ConnectivityService(uuid={:s}). status_code={:s} reply={:s}'
+            LOGGER.error(msg.format(str(uuid), str(response.status_code), str(response)))
+        results.append(response.status_code in HTTP_OK_CODES)
+    return results
+
+if __name__ == '__main__':
+    ROOT_URL = 'https://127.0.0.1:8443'
+    SERVICE_UUID = 'my-service'
+
+    create_connectivity_service(ROOT_URL, SERVICE_UUID, '172.18.0.1', '1', '172.18.0.2', '2', 300)
+    delete_connectivity_service(ROOT_URL, SERVICE_UUID)
-- 
GitLab


From 5e4cdc8e4ba09e4ef634a98e0320f31727ccfa14 Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Mon, 27 Feb 2023 09:48:03 +0100
Subject: [PATCH 163/229] L2VPN bugs fixed

---
 src/common/method_wrappers/tests/deploy_specs.sh          | 4 ++--
 src/device/service/drivers/openconfig/OpenConfigDriver.py | 7 ++++---
 .../templates/interface/subinterface/edit_config.xml      | 4 +++-
 src/load_generator/load_gen/RequestGenerator.py           | 8 ++++++--
 .../service_handlers/l2nm_openconfig/ConfigRules.py       | 8 +++-----
 5 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/src/common/method_wrappers/tests/deploy_specs.sh b/src/common/method_wrappers/tests/deploy_specs.sh
index 1f41d2348..41537a26c 100755
--- a/src/common/method_wrappers/tests/deploy_specs.sh
+++ b/src/common/method_wrappers/tests/deploy_specs.sh
@@ -57,7 +57,7 @@ export CRDB_DATABASE="tfs"
 export CRDB_DEPLOY_MODE="single"
 
 # Disable flag for dropping database, if it exists.
-export CRDB_DROP_DATABASE_IF_EXISTS=""
+export CRDB_DROP_DATABASE_IF_EXISTS="YES"
 
 # Disable flag for re-deploying CockroachDB from scratch.
 export CRDB_REDEPLOY=""
@@ -90,7 +90,7 @@ export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
 export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
 
 # Disable flag for dropping tables if they exist.
-export QDB_DROP_TABLES_IF_EXIST=""
+export QDB_DROP_TABLES_IF_EXIST="YES"
 
 # Disable flag for re-deploying QuestDB from scratch.
 export QDB_REDEPLOY=""
diff --git a/src/device/service/drivers/openconfig/OpenConfigDriver.py b/src/device/service/drivers/openconfig/OpenConfigDriver.py
index a0c335193..ac0352752 100644
--- a/src/device/service/drivers/openconfig/OpenConfigDriver.py
+++ b/src/device/service/drivers/openconfig/OpenConfigDriver.py
@@ -201,7 +201,7 @@ def edit_config(
     for i,resource in enumerate(resources):
         str_resource_name = 'resources[#{:d}]'.format(i)
         try:
-            #logger.debug('[{:s}] resource = {:s}'.format(str_method, str(resource)))
+            logger.debug('[{:s}] resource = {:s}'.format(str_method, str(resource)))
             chk_type(str_resource_name, resource, (list, tuple))
             chk_length(str_resource_name, resource, min_length=2, max_length=2)
             resource_key,resource_value = resource
@@ -209,8 +209,8 @@ def edit_config(
             str_config_message = compose_config(
                 resource_key, resource_value, delete=delete, vendor=netconf_handler.vendor)
             if str_config_message is None: raise UnsupportedResourceKeyException(resource_key)
-            #logger.debug('[{:s}] str_config_message[{:d}] = {:s}'.format(
-            #    str_method, len(str_config_message), str(str_config_message)))
+            logger.debug('[{:s}] str_config_message[{:d}] = {:s}'.format(
+                str_method, len(str_config_message), str(str_config_message)))
             netconf_handler.edit_config(
                 config=str_config_message, target=target, default_operation=default_operation,
                 test_option=test_option, error_option=error_option, format=format)
@@ -228,6 +228,7 @@ def edit_config(
             netconf_handler.commit()
         except Exception as e: # pylint: disable=broad-except
             msg = '[{:s}] Exception committing: {:s}'
+            str_operation = 'preparing' if target == 'candidate' else ('deleting' if delete else 'setting')
             logger.exception(msg.format(str_method, str_operation, str(resources)))
             results = [e for _ in resources] # if commit fails, set exception in each resource
     return results
diff --git a/src/device/service/drivers/openconfig/templates/interface/subinterface/edit_config.xml b/src/device/service/drivers/openconfig/templates/interface/subinterface/edit_config.xml
index 1bdb8efbf..e44100400 100644
--- a/src/device/service/drivers/openconfig/templates/interface/subinterface/edit_config.xml
+++ b/src/device/service/drivers/openconfig/templates/interface/subinterface/edit_config.xml
@@ -1,7 +1,8 @@
 <interfaces xmlns="http://openconfig.net/yang/interfaces" 
             xmlns:oc-ip="http://openconfig.net/yang/interfaces/ip" >
-    <interface>
+    <interface{% if operation is defined %} xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" nc:operation="{{operation}}"{% endif %}>
         <name>{{name}}</name>
+        {% if operation is defined and operation != 'delete' %}
         <config>
             <name>{{name}}</name>
             <type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:{{type}}</type>
@@ -44,5 +45,6 @@
                 {% endif %}
             </subinterface>
         </subinterfaces>
+        {% endif %}
     </interface>
 </interfaces>
diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index 29ec6a90b..5e420c2f4 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -37,11 +37,15 @@ LOGGER = logging.getLogger(__name__)
 ROUTER_ID = {
     'R149': '5.5.5.5',
     'R155': '5.5.5.1',
+    'R199': '5.5.5.6',
+
 }
 
 VIRTUAL_CIRCUIT = {
     'R149': '5.5.5.5',
     'R155': '5.5.5.1',
+    'R199': '5.5.5.6',
+
 }
 
 class RequestGenerator:
@@ -333,7 +337,7 @@ class RequestGenerator:
                     '/device[{:s}]/endpoint[{:s}]/settings'.format(src_device_name, src_endpoint_name), {
                         'router_id'          : src_router_id,
                         'route_distinguisher': route_distinguisher,
-                        'sub_interface_index': vlan_id,
+                        'sub_interface_index': 0,
                         'vlan_id'            : vlan_id,
                         'address_ip'         : src_address_ip,
                         'address_prefix'     : 16,
@@ -344,7 +348,7 @@ class RequestGenerator:
                     '/device[{:s}]/endpoint[{:s}]/settings'.format(dst_device_name, dst_endpoint_name), {
                         'router_id'          : dst_router_id,
                         'route_distinguisher': route_distinguisher,
-                        'sub_interface_index': vlan_id,
+                        'sub_interface_index': 0,
                         'vlan_id'            : vlan_id,
                         'address_ip'         : dst_address_ip,
                         'address_prefix'     : 16,
diff --git a/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
index bbd91df93..07e78d736 100644
--- a/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
@@ -105,19 +105,17 @@ def teardown_config_rules(
 
     if_cirid_name         = '{:s}.{:s}'.format(endpoint_name, str(circuit_id))
     network_instance_name = 'ELAN-AC:{:s}'.format(str(circuit_id))
-    connection_point_id   = 'VC-1'
+    #connection_point_id   = 'VC-1'
 
     json_config_rules = [
-        
-
-
         json_config_rule_delete(
             '/network_instance[{:s}]'.format(network_instance_name),
             {'name': network_instance_name}),
         
         json_config_rule_delete(
-            '/interface[{:s}]'.format(if_cirid_name), {
+            '/interface[{:s}]/subinterface[0]'.format(if_cirid_name),{
             'name': if_cirid_name,
         }),
+        
     ]
     return json_config_rules
-- 
GitLab


From 3c69f6304ecf10da7c078909e7bff70851bba10f Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Mon, 27 Feb 2023 11:06:10 +0100
Subject: [PATCH 164/229] L3VPN bugs fixed

---
 src/load_generator/load_gen/RequestGenerator.py               | 4 ++--
 .../service/service_handlers/l3nm_openconfig/ConfigRules.py   | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/load_generator/load_gen/RequestGenerator.py b/src/load_generator/load_gen/RequestGenerator.py
index 5e420c2f4..5c56ea6ec 100644
--- a/src/load_generator/load_gen/RequestGenerator.py
+++ b/src/load_generator/load_gen/RequestGenerator.py
@@ -352,8 +352,8 @@ class RequestGenerator:
                         'vlan_id'            : vlan_id,
                         'address_ip'         : dst_address_ip,
                         'address_prefix'     : 16,
-                        'policy_AZ'           : policy_AZ,
-                        'policy_ZA'           : policy_ZA,
+                        'policy_ZA'           : policy_AZ,
+                        'policy_AZ'           : policy_ZA,
                     }),
             ]
             return json_service_l3nm_planned(
diff --git a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
index 351efe5a5..ef93dcdda 100644
--- a/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l3nm_openconfig/ConfigRules.py
@@ -252,7 +252,7 @@ def teardown_config_rules(
 
         #Delete interface; automatically deletes:
         # - /interface[]/subinterface[]
-        json_config_rule_delete('/interface[{:s}]'.format(if_subif_name),
+        json_config_rule_delete('/interface[{:s}]/subinterface[0]'.format(if_subif_name),
         {
             'name': if_subif_name,
         }),
-- 
GitLab


From db17e18b981f86295832cdd4ce8820d6a67ee8b2 Mon Sep 17 00:00:00 2001
From: armingol <pablo.armingolrobles@telefonica.com>
Date: Tue, 28 Feb 2023 17:28:57 +0100
Subject: [PATCH 165/229] deploy_specs changes

---
 src/common/method_wrappers/tests/deploy_specs.sh | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/common/method_wrappers/tests/deploy_specs.sh b/src/common/method_wrappers/tests/deploy_specs.sh
index 41537a26c..1f41d2348 100755
--- a/src/common/method_wrappers/tests/deploy_specs.sh
+++ b/src/common/method_wrappers/tests/deploy_specs.sh
@@ -57,7 +57,7 @@ export CRDB_DATABASE="tfs"
 export CRDB_DEPLOY_MODE="single"
 
 # Disable flag for dropping database, if it exists.
-export CRDB_DROP_DATABASE_IF_EXISTS="YES"
+export CRDB_DROP_DATABASE_IF_EXISTS=""
 
 # Disable flag for re-deploying CockroachDB from scratch.
 export CRDB_REDEPLOY=""
@@ -90,7 +90,7 @@ export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
 export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
 
 # Disable flag for dropping tables if they exist.
-export QDB_DROP_TABLES_IF_EXIST="YES"
+export QDB_DROP_TABLES_IF_EXIST=""
 
 # Disable flag for re-deploying QuestDB from scratch.
 export QDB_REDEPLOY=""
-- 
GitLab


From 9f7e132fe9ff7ef53cb7d5813a4106691ad5cc3f Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 16:39:17 +0000
Subject: [PATCH 166/229] Common:

- Added Device Types for Radio Router
---
 src/common/DeviceTypes.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/common/DeviceTypes.py b/src/common/DeviceTypes.py
index 16b94eb0d..bb8948585 100644
--- a/src/common/DeviceTypes.py
+++ b/src/common/DeviceTypes.py
@@ -27,6 +27,7 @@ class DeviceTypeEnum(Enum):
     EMULATED_OPTICAL_TRANSPONDER    = 'emu-optical-transponder'
     EMULATED_OPTICAL_SPLITTER       = 'emu-optical-splitter'        # passive component required for XR Constellation
     EMULATED_P4_SWITCH              = 'emu-p4-switch'
+    EMULATED_PACKET_RADIO_ROUTER    = 'emu-packet-radio-router'
     EMULATED_PACKET_ROUTER          = 'emu-packet-router'
     EMULATED_PACKET_SWITCH          = 'emu-packet-switch'
     EMULATED_XR_CONSTELLATION       = 'emu-xr-constellation'
@@ -38,6 +39,7 @@ class DeviceTypeEnum(Enum):
     OPTICAL_ROADM                   = 'optical-roadm'
     OPTICAL_TRANSPONDER             = 'optical-transponder'
     P4_SWITCH                       = 'p4-switch'
+    PACKET_RADIO_ROUTER             = 'packet-radio-router'
     PACKET_ROUTER                   = 'packet-router'
     PACKET_SWITCH                   = 'packet-switch'
     XR_CONSTELLATION                = 'xr-constellation'
-- 
GitLab


From 90825c4c6fa041e2e67ed4a24fbf3021af0893ac Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 16:39:35 +0000
Subject: [PATCH 167/229] Compute component:

- Corrected OFC'23 constants
---
 .../nbi_plugins/ietf_l2vpn/Constants.py          | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
index b4f34c12a..84a18b32c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
@@ -76,12 +76,12 @@ BEARER_MAPPINGS = {
     'R4:1/3': ('R4', '1/3', '5.4.1.3', None, 0, None, None, None, None),
 
     # OFC'23
-    'PE1:1/2': ('PE1', '1/1', '10.1.1.1', None, 0, None, None, None, None),
-    'PE1:1/3': ('PE1', '1/2', '10.1.1.2', None, 0, None, None, None, None),
-    'PE2:1/2': ('PE2', '1/1', '10.2.1.1', None, 0, None, None, None, None),
-    'PE2:1/3': ('PE2', '1/2', '10.2.1.2', None, 0, None, None, None, None),
-    'PE3:1/2': ('PE3', '1/1', '10.3.1.1', None, 0, None, None, None, None),
-    'PE3:1/3': ('PE3', '1/2', '10.3.1.2', None, 0, None, None, None, None),
-    'PE4:1/2': ('PE4', '1/1', '10.4.1.1', None, 0, None, None, None, None),
-    'PE4:1/3': ('PE4', '1/2', '10.4.1.2', None, 0, None, None, None, None),
+    'PE1:1/1': ('PE1', '1/1', '10.1.1.1', None, 0, None, None, None, None),
+    'PE1:1/2': ('PE1', '1/2', '10.1.1.2', None, 0, None, None, None, None),
+    'PE2:1/1': ('PE2', '1/1', '10.2.1.1', None, 0, None, None, None, None),
+    'PE2:1/2': ('PE2', '1/2', '10.2.1.2', None, 0, None, None, None, None),
+    'PE3:1/1': ('PE3', '1/1', '10.3.1.1', None, 0, None, None, None, None),
+    'PE3:1/2': ('PE3', '1/2', '10.3.1.2', None, 0, None, None, None, None),
+    'PE4:1/1': ('PE4', '1/1', '10.4.1.1', None, 0, None, None, None, None),
+    'PE4:1/2': ('PE4', '1/2', '10.4.1.2', None, 0, None, None, None, None),
 }
-- 
GitLab


From 679ee91c12fd2e878e4dfc96a5cd34b12767166e Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 16:42:23 +0000
Subject: [PATCH 168/229] Device component:

- Corrected underlying link discovery
- IETF L2VPN Driver:  corrected configuration rules, removed logs, corrected parsing of return messages, minor adaptations in WIM connector
- XR Driver: Added topology discovery
---
 src/device/service/Tools.py                   |  2 +-
 .../drivers/ietf_l2vpn/IetfL2VpnDriver.py     | 33 ++++---------
 .../ietf_l2vpn/WimconnectorIETFL2VPN.py       | 13 ++---
 src/device/service/drivers/xr/XrDriver.py     | 49 ++++++++++++++++++-
 4 files changed, 62 insertions(+), 35 deletions(-)

diff --git a/src/device/service/Tools.py b/src/device/service/Tools.py
index 1dccea3ab..3694ce129 100644
--- a/src/device/service/Tools.py
+++ b/src/device/service/Tools.py
@@ -202,7 +202,7 @@ def populate_endpoints(
             _sub_link.name = resource_value['name']
             new_sub_links[_sub_link_uuid] = _sub_link
 
-            for device_uuid,endpoint_uuid in resource_value['name']:
+            for device_uuid,endpoint_uuid in resource_value['endpoints']:
                 _sub_link_endpoint_id = _sub_link.link_endpoint_ids.add()      # pylint: disable=no-member
                 _sub_link_endpoint_id.topology_id.context_id.context_uuid.uuid = DEFAULT_CONTEXT_NAME
                 _sub_link_endpoint_id.topology_id.topology_uuid.uuid = DEFAULT_TOPOLOGY_NAME
diff --git a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
index 8c7feb249..e08b7625b 100644
--- a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
+++ b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
@@ -131,24 +131,12 @@ class IetfL2VpnDriver(_Driver):
                         results.append((resource[0], exc))
                         continue
 
-                    src_device_endpoint = resource_value['src']
-                    src_device = src_device_endpoint['device']
-                    #src_device_uuid = src_device['uuid']
-                    src_device_name = src_device['name']
-                    src_endpoint = src_device_endpoint['endpoint']
-                    #src_endpoint_uuid = src_endpoint['uuid']
-                    src_endpoint_name = src_endpoint['name']
-
-                    dst_device_endpoint = resource_value['dst']
-                    dst_device = dst_device_endpoint['device']
-                    #dst_device_uuid = dst_device['uuid']
-                    dst_device_name = dst_device['name']
-                    dst_endpoint = dst_device_endpoint['endpoint']
-                    #dst_endpoint_uuid = dst_endpoint['uuid']
-                    dst_endpoint_name = dst_endpoint['name']
-
-                    encap_type = resource_value['encapsulation_type']
-                    vlan_id    = resource_value['vlan_id']
+                    src_device_name   = resource_value['src_device_name']
+                    src_endpoint_name = resource_value['src_endpoint_name']
+                    dst_device_name   = resource_value['dst_device_name']
+                    dst_endpoint_name = resource_value['dst_endpoint_name']
+                    encap_type        = resource_value['encapsulation_type']
+                    vlan_id           = resource_value['vlan_id']
 
                     src_endpoint_id = json_endpoint_id(json_device_id(src_device_name), src_endpoint_name)
                     src_service_endpoint_id, src_mapping = wim_mapping('1', src_endpoint_id)
@@ -163,10 +151,8 @@ class IetfL2VpnDriver(_Driver):
                         connection_point(dst_service_endpoint_id, encap_type, vlan_id),
                     ]
 
-                    result = self.wim.create_connectivity_service(SERVICE_TYPE, connection_points)
-                    LOGGER.info('[SetConfig] CREATE result={:s}'.format(str(result)))
-
-                    results.extend(process_connectivity_service('SetConfig', None))
+                    self.wim.create_connectivity_service(service_uuid, SERVICE_TYPE, connection_points)
+                    results.append((resource_key, True))
                 except Exception as e: # pylint: disable=broad-except
                     LOGGER.exception('Unhandled error processing resource_key({:s})'.format(str(resource_key)))
                     results.append((resource_key, e))
@@ -187,8 +173,7 @@ class IetfL2VpnDriver(_Driver):
 
                     if service_exists(self.wim, service_uuid):
                         self.wim.delete_connectivity_service(service_uuid)
-
-                    results.extend(process_connectivity_service('DeleteConfig', None))
+                    results.append((resource_key, True))
                 except Exception as e: # pylint: disable=broad-except
                     LOGGER.exception('Unhandled error processing resource_key({:s})'.format(str(resource_key)))
                     results.append((resource_key, e))
diff --git a/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py b/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
index 960256cd0..34ff184c0 100644
--- a/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
+++ b/src/device/service/drivers/ietf_l2vpn/WimconnectorIETFL2VPN.py
@@ -119,7 +119,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase):
         else:
             return self.mappings[id]
 
-    def create_connectivity_service(self, service_type, connection_points, **kwargs):
+    def create_connectivity_service(self, service_uuid, service_type, connection_points, **kwargs):
         """Stablish WAN connectivity between the endpoints
 
         Arguments:
@@ -154,9 +154,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase):
         Other QoS might be passed as keyword arguments.
 
         Returns:
-            tuple: ``(service_id, conn_info)`` containing:
-               - *service_uuid* (str): UUID of the established connectivity
-                  service
+            tuple: ``conn_info``:
                - *conn_info* (dict or None): Information to be stored at the
                  database (or ``None``). This information will be provided to
                  the :meth:`~.edit_connectivity_service` and :obj:`~.delete`.
@@ -182,9 +180,8 @@ class WimconnectorIETFL2VPN(SdnConnectorBase):
             raise SdnConnectorError(msg.format(min_endpoints, service_type))
 
         """First step, create the vpn service"""
-        uuid_l2vpn = str(uuid.uuid4())
         vpn_service = {}
-        vpn_service["vpn-id"] = uuid_l2vpn
+        vpn_service["vpn-id"] = service_uuid
         vpn_service["vpn-svc-type"] = vpn_service_type
         vpn_service["svc-topo"] = "any-to-any"
         vpn_service["customer-name"] = "osm"
@@ -277,7 +274,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase):
             site_network_access["connection"] = connection
             self.logger.info("Sending connection:{}".format(connection))
             vpn_attach = {}
-            vpn_attach["vpn-id"] = uuid_l2vpn
+            vpn_attach["vpn-id"] = service_uuid
             vpn_attach["site-role"] = vpn_service["svc-topo"] + "-role"
             site_network_access["vpn-attachment"] = vpn_attach
             self.logger.info("Sending vpn-attachement :{}".format(vpn_attach))
@@ -379,7 +376,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase):
 
                 raise SdnConnectorError("Request Timeout", http_code=408)
 
-        return uuid_l2vpn, conn_info
+        return conn_info
 
     def delete_connectivity_service(self, service_uuid, conn_info=None):
         """Disconnect multi-site endpoints previously connected
diff --git a/src/device/service/drivers/xr/XrDriver.py b/src/device/service/drivers/xr/XrDriver.py
index 605f4ce8d..83ffd5218 100644
--- a/src/device/service/drivers/xr/XrDriver.py
+++ b/src/device/service/drivers/xr/XrDriver.py
@@ -16,9 +16,11 @@
 import logging
 import threading
 import json
-from typing import Any, Iterator, List, Optional, Tuple, Union
+from typing import Any, Iterator, List, Optional, Set, Tuple, Union
 import urllib3
+from common.DeviceTypes import DeviceTypeEnum
 from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
+from common.proto.context_pb2 import DeviceDriverEnum, DeviceOperationalStatusEnum
 from common.type_checkers.Checkers import chk_type
 from device.service.driver_api._Driver import _Driver
 from .cm.cm_connection import CmConnection, ConsistencyMode
@@ -98,7 +100,50 @@ class XrDriver(_Driver):
             constellation = self.__cm_connection.get_constellation_by_hub_name(self.__hub_module_name)
             if constellation:
                 self.__constellation = constellation
-                return [(f"/endpoints/endpoint[{ifname}]", {'uuid': ifname, 'type': 'optical', 'sample_types': {}}) for ifname in constellation.ifnames()]
+                #return [(f"/endpoints/endpoint[{ifname}]", {'uuid': ifname, 'type': 'optical', 'sample_types': {}}) for ifname in constellation.ifnames()]
+
+                devices : Set[str] = set()
+                pluggables : Set[str] = set()
+                devices_and_endpoints = []
+                for ifname in constellation.ifnames():
+                    device_name,pluggable_name = ifname.split('|')
+
+                    if device_name not in devices:
+                        device_url = '/devices/device[{:s}]'.format(device_name)
+                        device_data = {
+                            'uuid': device_name, 'name': device_name,
+                            'type': DeviceTypeEnum.EMULATED_PACKET_ROUTER.value,
+                            'status': DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED,
+                            'drivers': [DeviceDriverEnum.DEVICEDRIVER_UNDEFINED],
+                        }
+                        devices_and_endpoints.append((device_url, device_data))
+
+                        for copper_if_index in range(4):
+                            copper_ifname = '1/{:d}'.format(copper_if_index + 1)
+                            endpoint_url = '/endpoints/endpoint[{:s}]'.format(copper_ifname)
+                            endpoint_data = {
+                                'device_uuid': device_name, 'uuid': copper_ifname, 'name': copper_ifname,
+                                'type': 'copper/internal', 'sample_types': {}
+                            }
+                            devices_and_endpoints.append((endpoint_url, endpoint_data))
+
+                        devices.add(device_name)
+
+                    if ifname not in pluggables:
+                        endpoint_url = '/endpoints/endpoint[{:s}]'.format(ifname)
+                        if 'hub' in ifname.lower():
+                            endpoint_type = 'optical/xr-hub'
+                        elif 'leaf' in ifname.lower():
+                            endpoint_type = 'optical/xr-leaf'
+                        else:
+                            endpoint_type = 'optical/xr'
+                        endpoint_data = {
+                            'device_uuid': device_name, 'uuid': pluggable_name, 'name': pluggable_name,
+                            'type': endpoint_type, 'sample_types': {}
+                        }
+                        devices_and_endpoints.append((endpoint_url, endpoint_data))
+
+                return devices_and_endpoints
             else:
                 return []
 
-- 
GitLab


From 1f7e51632d08c8d572fd8511c52319455620a9b2 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 16:43:15 +0000
Subject: [PATCH 169/229] PathComp component - Backend:

- Deactivated bidirectional link auto-creation
- Deactivated resource consumption in multi-path computations
---
 src/pathcomp/backend/pathComp_RESTapi.c | 4 +++-
 src/pathcomp/backend/pathComp_sp.c      | 4 ++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/pathcomp/backend/pathComp_RESTapi.c b/src/pathcomp/backend/pathComp_RESTapi.c
index 8ee7f6d82..82d4b38a8 100644
--- a/src/pathcomp/backend/pathComp_RESTapi.c
+++ b/src/pathcomp/backend/pathComp_RESTapi.c
@@ -1211,7 +1211,9 @@ void parsing_json_obj_pathComp_request(cJSON * root, GIOChannel * source)
 
 		// In the context information, if solely the list of links are passed for a single direction, 
 		// the reverse direction MUST be created sythetically 
-		generate_reverse_linkList();
+		
+		// LGR: deactivated; link duplication needs to be done smartly with TAPI. done manually in topology by now
+		//generate_reverse_linkList();
 	}
 	return;
 }
diff --git a/src/pathcomp/backend/pathComp_sp.c b/src/pathcomp/backend/pathComp_sp.c
index 447b0d2a6..b143b0493 100644
--- a/src/pathcomp/backend/pathComp_sp.c
+++ b/src/pathcomp/backend/pathComp_sp.c
@@ -296,8 +296,8 @@ void sp_execution_services(struct compRouteOutputList_t* oPathList)
 			 continue;
 		 }
 		 struct path_t* path = &(pathService->paths[pathService->numPaths - 1]);
-		 allocate_graph_resources(path, service, g);
-		 allocate_graph_reverse_resources(path, service, g);
+		 //allocate_graph_resources(path, service, g);			// LGR: crashes in some cases with assymetric topos
+		 //allocate_graph_reverse_resources(path, service, g);	// LGR: crashes in some cases with assymetric topos
 		 print_graph(g);
 	}
 	return;
-- 
GitLab


From 71e7ebce65230cf3ab661927f29289b91be7f495 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 16:44:48 +0000
Subject: [PATCH 170/229] Service component:

- L2NM/L3NM Emulated Service Handler: ignored configurations when there are no rules to configure
- IETF L2VPN Service Handler: corrected configuration rule for Device component
---
 .../L2NMEmulatedServiceHandler.py             | 20 +++++++++++--------
 .../L2NM_IETFL2VPN_ServiceHandler.py          | 12 ++++-------
 .../L3NMEmulatedServiceHandler.py             | 20 +++++++++++--------
 3 files changed, 28 insertions(+), 24 deletions(-)

diff --git a/src/service/service/service_handlers/l2nm_emulated/L2NMEmulatedServiceHandler.py b/src/service/service/service_handlers/l2nm_emulated/L2NMEmulatedServiceHandler.py
index 9de6c607b..0a2261ceb 100644
--- a/src/service/service/service_handlers/l2nm_emulated/L2NMEmulatedServiceHandler.py
+++ b/src/service/service/service_handlers/l2nm_emulated/L2NMEmulatedServiceHandler.py
@@ -75,10 +75,12 @@ class L2NMEmulatedServiceHandler(_ServiceHandler):
                     service_uuid, connection_uuid, device_uuid, endpoint_uuid, endpoint_name,
                     settings, endpoint_settings)
 
-                del device_obj.device_config.config_rules[:]
-                for json_config_rule in json_config_rules:
-                    device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
-                self.__task_executor.configure_device(device_obj)
+                if len(json_config_rules) > 0:
+                    del device_obj.device_config.config_rules[:]
+                    for json_config_rule in json_config_rules:
+                        device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
+                    self.__task_executor.configure_device(device_obj)
+
                 results.append(True)
             except Exception as e: # pylint: disable=broad-except
                 LOGGER.exception('Unable to SetEndpoint({:s})'.format(str(endpoint)))
@@ -110,10 +112,12 @@ class L2NMEmulatedServiceHandler(_ServiceHandler):
                     service_uuid, connection_uuid, device_uuid, endpoint_uuid, endpoint_name,
                     settings, endpoint_settings)
 
-                del device_obj.device_config.config_rules[:]
-                for json_config_rule in json_config_rules:
-                    device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
-                self.__task_executor.configure_device(device_obj)
+                if len(json_config_rules) > 0:
+                    del device_obj.device_config.config_rules[:]
+                    for json_config_rule in json_config_rules:
+                        device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
+                    self.__task_executor.configure_device(device_obj)
+
                 results.append(True)
             except Exception as e: # pylint: disable=broad-except
                 LOGGER.exception('Unable to DeleteEndpoint({:s})'.format(str(endpoint)))
diff --git a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
index f58c7809f..7a2c4e723 100644
--- a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
+++ b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
@@ -68,16 +68,12 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
 
             json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
                 'uuid'              : service_uuid,
+                'src_device_name'   : src_device.name,
+                'src_endpoint_name' : src_endpoint.name,
+                'dst_device_name'   : dst_device.name,
+                'dst_endpoint_name' : dst_endpoint.name,
                 'encapsulation_type': encap_type,
                 'vlan_id'           : vlan_id,
-                'src': {
-                    'device'  : {'uuid': src_device_uuid,   'name': src_device.name  },
-                    'endpoint': {'uuid': src_endpoint_uuid, 'name': src_endpoint.name},
-                },
-                'dst': {
-                    'device'  : {'uuid': dst_device_uuid,   'name': dst_device.name  },
-                    'endpoint': {'uuid': dst_endpoint_uuid, 'name': dst_endpoint.name},
-                },
             })
             del manager.device_config.config_rules[:]
             manager.device_config.config_rules.append(ConfigRule(**json_config_rule))
diff --git a/src/service/service/service_handlers/l3nm_emulated/L3NMEmulatedServiceHandler.py b/src/service/service/service_handlers/l3nm_emulated/L3NMEmulatedServiceHandler.py
index 47de9c94f..18da03b08 100644
--- a/src/service/service/service_handlers/l3nm_emulated/L3NMEmulatedServiceHandler.py
+++ b/src/service/service/service_handlers/l3nm_emulated/L3NMEmulatedServiceHandler.py
@@ -75,10 +75,12 @@ class L3NMEmulatedServiceHandler(_ServiceHandler):
                     service_uuid, connection_uuid, device_uuid, endpoint_uuid, endpoint_name,
                     settings, endpoint_settings)
 
-                del device_obj.device_config.config_rules[:]
-                for json_config_rule in json_config_rules:
-                    device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
-                self.__task_executor.configure_device(device_obj)
+                if len(json_config_rules) > 0:
+                    del device_obj.device_config.config_rules[:]
+                    for json_config_rule in json_config_rules:
+                        device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
+                    self.__task_executor.configure_device(device_obj)
+
                 results.append(True)
             except Exception as e: # pylint: disable=broad-except
                 LOGGER.exception('Unable to SetEndpoint({:s})'.format(str(endpoint)))
@@ -110,10 +112,12 @@ class L3NMEmulatedServiceHandler(_ServiceHandler):
                     service_uuid, connection_uuid, device_uuid, endpoint_uuid, endpoint_name,
                     settings, endpoint_settings)
 
-                del device_obj.device_config.config_rules[:]
-                for json_config_rule in json_config_rules:
-                    device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
-                self.__task_executor.configure_device(device_obj)
+                if len(json_config_rules) > 0:
+                    del device_obj.device_config.config_rules[:]
+                    for json_config_rule in json_config_rules:
+                        device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
+                    self.__task_executor.configure_device(device_obj)
+
                 results.append(True)
             except Exception as e: # pylint: disable=broad-except
                 LOGGER.exception('Unable to DeleteEndpoint({:s})'.format(str(endpoint)))
-- 
GitLab


From 014706d30affa0242654a417e2b27def836c5d79 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 16:47:37 +0000
Subject: [PATCH 171/229] Tools - Mock MW SDN Controller:

- Added link identifiers
- Added run script
---
 .../tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py      |  4 ++--
 src/tests/tools/mock_mw_sdn_ctrl/run.sh          | 16 ++++++++++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)
 create mode 100755 src/tests/tools/mock_mw_sdn_ctrl/run.sh

diff --git a/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
index d3d9de4a2..91542d85b 100644
--- a/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
+++ b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
@@ -53,11 +53,11 @@ NETWORK_NODES = [
     ]}
 ]
 NETWORK_LINKS = [
-    {
+    {   'link-id'    : '172.18.0.1:2--172.18.0.2:2',
         'source'     : {'source-node': '172.18.0.1', 'source-tp': '2'},
         'destination': {'dest-node'  : '172.18.0.2', 'dest-tp'  : '2'},
     },
-    {
+    {   'link-id'    : '172.18.0.3:2--172.18.0.4:2',
         'source'     : {'source-node': '172.18.0.3', 'source-tp': '2'},
         'destination': {'dest-node'  : '172.18.0.4', 'dest-tp'  : '2'},
     }
diff --git a/src/tests/tools/mock_mw_sdn_ctrl/run.sh b/src/tests/tools/mock_mw_sdn_ctrl/run.sh
new file mode 100755
index 000000000..415fc1751
--- /dev/null
+++ b/src/tests/tools/mock_mw_sdn_ctrl/run.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+python MockMWSdnCtrl.py
-- 
GitLab


From 956e1ead6b8d6f603d96df47751b2b504407dce6 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 16:48:36 +0000
Subject: [PATCH 172/229] Tools - Mock IPM SDN Controller:

- Initial version (work in progress)
---
 .../tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py | 131 ++++++++++++++++++
 src/tests/tools/mock_ipm_sdn_ctrl/run.sh      |  16 +++
 2 files changed, 147 insertions(+)
 create mode 100644 src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py
 create mode 100755 src/tests/tools/mock_ipm_sdn_ctrl/run.sh

diff --git a/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py b/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py
new file mode 100644
index 000000000..52a85a00d
--- /dev/null
+++ b/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py
@@ -0,0 +1,131 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Mock IPM controller (implements minimal support)
+
+import functools, json, logging, sys, time, uuid
+from flask import Flask, jsonify, make_response, request
+from flask_restful import Api, Resource
+
+BIND_ADDRESS = '0.0.0.0'
+BIND_PORT    = 8444
+IPM_USERNAME = 'xr-user-1'
+IPM_PASSWORD = 'xr-user-1'
+STR_ENDPOINT = 'https://{:s}:{:s}'.format(str(BIND_ADDRESS), str(BIND_PORT))
+LOG_LEVEL    = logging.DEBUG
+
+CONSTELLATION = {
+    'id': 'ofc-constellation',
+    'hubModule': {'state': {
+        'module': {'moduleName': 'OFC HUB 1', 'trafficMode': 'L1Mode'},
+        'endpoints': [{'moduleIf': {'clientIfAid': 'XR-T1'}}, {'moduleIf': {'clientIfAid': 'XR-T4'}}]
+    }},
+    'leafModules': [
+        {'state': {
+            'module': {'moduleName': 'OFC LEAF 1', 'trafficMode': 'L1Mode'},
+            'endpoints': [{'moduleIf': {'clientIfAid': 'XR-T1'}}]
+        }},
+        {'state': {
+            'module': {'moduleName': 'OFC LEAF 2', 'trafficMode': 'L1Mode'},
+            'endpoints': [{'moduleIf': {'clientIfAid': 'XR-T1'}}]
+        }}
+    ]
+}
+
+logging.basicConfig(level=LOG_LEVEL, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s")
+LOGGER = logging.getLogger(__name__)
+
+logging.getLogger('werkzeug').setLevel(logging.WARNING)
+
+def log_request(logger : logging.Logger, response):
+    timestamp = time.strftime('[%Y-%b-%d %H:%M]')
+    logger.info('%s %s %s %s %s', timestamp, request.remote_addr, request.method, request.full_path, response.status)
+    return response
+
+#class Health(Resource):
+#    def get(self):
+#        return make_response(jsonify({}), 200)
+
+class OpenIdConnect(Resource):
+    ACCESS_TOKENS = {}
+
+    def post(self):
+        if request.content_type != 'application/x-www-form-urlencoded': return make_response('bad content type', 400)
+        if request.content_length == 0: return make_response('bad content length', 400)
+        form_request = request.form
+        if form_request.get('client_id') != 'xr-web-client': return make_response('bad client_id', 403)
+        if form_request.get('client_secret') != 'xr-web-client': return make_response('bad client_secret', 403)
+        if form_request.get('grant_type') != 'password': return make_response('bad grant_type', 403)
+        if form_request.get('username') != IPM_USERNAME: return make_response('bad username', 403)
+        if form_request.get('password') != IPM_PASSWORD: return make_response('bad password', 403)
+        access_token = OpenIdConnect.ACCESS_TOKENS.setdefault(IPM_USERNAME, uuid.uuid4())
+        reply = {'access_token': access_token, 'expires_in': 86400}
+        return make_response(jsonify(reply), 200)
+
+class XrNetworks(Resource):
+    def get(self):
+        print(str(request.args))
+        content = request.args.get('content')
+        print('content', content)
+        query = json.loads(request.args.get('q'))
+        hub_module_name = query.get('hubModule.state.module.moduleName')
+        if hub_module_name != 'OFC HUB 1': return make_response('unexpected hub module', 404)
+        print('query', query)
+        return make_response(jsonify([CONSTELLATION]), 200)
+
+#class Services(Resource):
+#    def get(self):
+#        services = [service for service in NETWORK_SERVICES.values()]
+#        return make_response(jsonify({'ietf-eth-tran-service:etht-svc': {'etht-svc-instances': services}}), 200)
+#
+#    def post(self):
+#        json_request = request.get_json()
+#        if not json_request: abort(400)
+#        if not isinstance(json_request, dict): abort(400)
+#        if 'etht-svc-instances' not in json_request: abort(400)
+#        json_services = json_request['etht-svc-instances']
+#        if not isinstance(json_services, list): abort(400)
+#        if len(json_services) != 1: abort(400)
+#        svc_data = json_services[0]
+#        etht_svc_name = svc_data['etht-svc-name']
+#        NETWORK_SERVICES[etht_svc_name] = svc_data
+#        return make_response(jsonify({}), 201)
+
+#class DelServices(Resource):
+#    def delete(self, service_uuid : str):
+#        NETWORK_SERVICES.pop(service_uuid, None)
+#        return make_response(jsonify({}), 204)
+
+def main():
+    LOGGER.info('Starting...')
+    
+    app = Flask(__name__)
+    app.after_request(functools.partial(log_request, LOGGER))
+
+    api = Api(app)
+    #api.add_resource(Health,      '/ietf-network:networks')
+    api.add_resource(OpenIdConnect, '/realms/xr-cm/protocol/openid-connect/token')
+    api.add_resource(XrNetworks,    '/api/v1/xr-networks')
+    #api.add_resource(Network,     '/ietf-network:networks/network=<string:network_uuid>')
+    #api.add_resource(Services,    '/ietf-eth-tran-service:etht-svc')
+    #api.add_resource(DelServices, '/ietf-eth-tran-service:etht-svc/etht-svc-instances=<string:service_uuid>')
+
+    LOGGER.info('Listening on {:s}...'.format(str(STR_ENDPOINT)))
+    app.run(debug=True, host=BIND_ADDRESS, port=BIND_PORT, ssl_context='adhoc')
+
+    LOGGER.info('Bye')
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/src/tests/tools/mock_ipm_sdn_ctrl/run.sh b/src/tests/tools/mock_ipm_sdn_ctrl/run.sh
new file mode 100755
index 000000000..2aa78712c
--- /dev/null
+++ b/src/tests/tools/mock_ipm_sdn_ctrl/run.sh
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+python MockIPMSdnCtrl.py
-- 
GitLab


From 1a4bef03dd71ce6f101a86ad1b3afbbed9767f0d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 16:55:44 +0000
Subject: [PATCH 173/229] OFC'23 scenario:

- Added XR controller in the topology
- Created separate file without XR devices
- Removed unneeded descriptors
- Updated service descriptor
---
 .../ofc23/descriptors/dc-2-dc-service.json    |  31 +-
 .../ofc23/descriptors/descriptor_parent.json  | 216 +++++++++---
 .../descriptors/descriptor_parent_noxr.json   | 332 ++++++++++++++++++
 src/tests/ofc23/descriptors/splitter.json     |  18 -
 4 files changed, 515 insertions(+), 82 deletions(-)
 create mode 100644 src/tests/ofc23/descriptors/descriptor_parent_noxr.json
 delete mode 100644 src/tests/ofc23/descriptors/splitter.json

diff --git a/src/tests/ofc23/descriptors/dc-2-dc-service.json b/src/tests/ofc23/descriptors/dc-2-dc-service.json
index e60b7489b..7c3be015d 100644
--- a/src/tests/ofc23/descriptors/dc-2-dc-service.json
+++ b/src/tests/ofc23/descriptors/dc-2-dc-service.json
@@ -16,27 +16,24 @@
             ],
             "service_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "/settings", "resource_value": {
-                    "address_families": ["IPV4"],
-                    "bgp_as": 65000,
-                    "bgp_route_target": "65000:333",
-                    "mtu": 1512,
-                    "vlan_id": 300
+                    "address_families": ["IPV4"], "bgp_as": 65000, "bgp_route_target": "65000:123",
+                    "mtu": 1512, "vlan_id": 300
                 }}},
                 {"action": 1, "custom": {"resource_key": "/device[PE1]/endpoint[1/1]/settings", "resource_value": {
-                    "address_ip": "3.3.2.1",
-                    "address_prefix": 24,
-                    "route_distinguisher": "65000:123",
-                    "router_id": "10.10.10.1",
-                    "sub_interface_index": 400,
-                    "vlan_id": 400
+                    "route_distinguisher": "65000:123", "router_id": "10.0.0.1",
+                    "address_ip": "3.3.1.1", "address_prefix": 24, "sub_interface_index": 1, "vlan_id": 300
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[PE2]/endpoint[1/1]/settings", "resource_value": {
+                    "route_distinguisher": "65000:123", "router_id": "10.0.0.2",
+                    "address_ip": "3.3.2.1", "address_prefix": 24, "sub_interface_index": 1, "vlan_id": 300
                 }}},
                 {"action": 1, "custom": {"resource_key": "/device[PE3]/endpoint[1/1]/settings", "resource_value": {
-                    "address_ip": "3.3.1.1",
-                    "address_prefix": 24,
-                    "route_distinguisher": "65000:321",
-                    "router_id": "20.20.20.1",
-                    "sub_interface_index": 400,
-                    "vlan_id": 500
+                    "route_distinguisher": "65000:123", "router_id": "10.0.0.3",
+                    "address_ip": "3.3.3.1", "address_prefix": 24, "sub_interface_index": 1, "vlan_id": 300
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[PE4]/endpoint[1/1]/settings", "resource_value": {
+                    "route_distinguisher": "65000:123", "router_id": "10.0.0.4",
+                    "address_ip": "3.3.4.1", "address_prefix": 24, "sub_interface_index": 1, "vlan_id": 300
                 }}}
             ]}
         }
diff --git a/src/tests/ofc23/descriptors/descriptor_parent.json b/src/tests/ofc23/descriptors/descriptor_parent.json
index fd6b23857..acf98c574 100644
--- a/src/tests/ofc23/descriptors/descriptor_parent.json
+++ b/src/tests/ofc23/descriptors/descriptor_parent.json
@@ -47,48 +47,41 @@
             ]}
         },
         {
-            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
-                ]}}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "R1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_id": {"device_uuid": {"uuid": "IPM"}}, "device_type": "xr-constellation", "device_drivers": [6],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/3"}
-                ]}}}
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8444"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "xr-user-1", "password": "xr-user-1", "hub_module_name": "OFC HUB 1",
+                    "consistency-mode": "lifecycle"
+                }}}
             ]}
         },
+
+
         {
-            "device_id": {"device_uuid": {"uuid": "R2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
                 ]}}}
             ]}
         },
         {
-            "device_id": {"device_uuid": {"uuid": "R3"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "device_type": "emu-optical-splitter", "device_drivers": [0],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                    {"sample_types": [], "type": "optical/internal", "uuid": "common"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf1"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf2"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf3"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf4"}
                 ]}}}
             ]}
         },
@@ -112,12 +105,28 @@
                 {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/1"}}
             ]
         },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE1/1/1==DC1/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+
+
         {
             "link_id": {"link_uuid": {"uuid": "DC1/eth2==PE2/1/1"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth2"}},
                 {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/1"}}
             ]
         },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE2/1/1==DC1/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth2"}}
+            ]
+        },
+
+
         {
             "link_id": {"link_uuid": {"uuid": "PE1/1/2==MW1-2/172.18.0.1:1"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/2"}},
@@ -125,11 +134,27 @@
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "MW1-2/172.18.0.2:1==R1/1/1"}}, "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "MW1-2/172.18.0.1:1==PE1/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.1:1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "MW1-2/172.18.0.2:1==OFC HUB 1/1/1"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.2:1"}},
-                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/1"}}
             ]
         },
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/1/1==MW1-2/172.18.0.2:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.2:1"}}
+            ]
+        },
+
+
         {
             "link_id": {"link_uuid": {"uuid": "PE2/1/2==MW3-4/172.18.0.3:1"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/2"}},
@@ -137,53 +162,150 @@
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "MW3-4/172.18.0.4:1==R1/1/2"}}, "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "MW3-4/172.18.0.3:1==PE2/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.3:1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "MW3-4/172.18.0.4:1==OFC HUB 1/1/2"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.4:1"}},
-                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/2"}}
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/1/2==MW3-4/172.18.0.4:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.4:1"}}
             ]
         },
+
+
         {
-            "link_id": {"link_uuid": {"uuid": "R1/1/3==OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/3"}},
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/XR-T1==Optical-Splitter/common"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "common"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/common==OFC HUB 1/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "common"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/leaf1==OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf1"}},
                 {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "aade6001-f00b-5e2f-a357-6a0a9d3de870"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513==R2/1/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}},
-                {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            "link_id": {"link_uuid": {"uuid": "OLS/79516f5e-55a0-5671-977a-1f5cc934e700==Optical-Splitter/leaf1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "79516f5e-55a0-5671-977a-1f5cc934e700"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf1"}}
             ]
         },
+
+
         {
-            "link_id": {"link_uuid": {"uuid": "OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec==R3/1/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}},
-                {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/leaf2==OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf2"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}
             ]
         },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/30d9323e-b916-51ce-a9a8-cf88f62eb77f==Optical-Splitter/leaf2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "30d9323e-b916-51ce-a9a8-cf88f62eb77f"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf2"}}
+            ]
+        },
+
 
         {
-            "link_id": {"link_uuid": {"uuid": "R2/1/2==PE3/1/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "1/2"}},
-                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 1/XR-T1==OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "R3/1/2==PE4/1/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "1/2"}},
-                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            "link_id": {"link_uuid": {"uuid": "OLS/68ac012e-54d4-5846-b5dc-6ec356404f90==OFC LEAF 1/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "68ac012e-54d4-5846-b5dc-6ec356404f90"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 2/XR-T1==OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/367b19b1-3172-54d8-bdd4-12d3ac5604f6==OFC LEAF 2/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "367b19b1-3172-54d8-bdd4-12d3ac5604f6"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 1/1/1==PE3/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/2"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "PE3/1/2==DC2/eth1"}}, "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "PE3/1/2==OFC LEAF 1/1/1"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/2"}},
-                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}}
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 2/1/1==PE4/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/2"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "PE4/1/2==DC2/eth2"}}, "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "PE4/1/2==OFC LEAF 2/1/1"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE3/1/1==DC2/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC2/eth1==PE3/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE4/1/1==DC2/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/1"}},
                 {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}}
             ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC2/eth2==PE4/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
         }
     ]
 }
diff --git a/src/tests/ofc23/descriptors/descriptor_parent_noxr.json b/src/tests/ofc23/descriptors/descriptor_parent_noxr.json
new file mode 100644
index 000000000..c4a6646ed
--- /dev/null
+++ b/src/tests/ofc23/descriptors/descriptor_parent_noxr.json
@@ -0,0 +1,332 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "TFS-IP"}}, "device_type": "teraflowsdn", "device_drivers": [7],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8002"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "scheme": "http", "username": "admin", "password": "admin"
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "MW1-2"}}, "device_type": "microwave-radio-system", "device_drivers": [5],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8443"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
+                    "node_ids": ["172.18.0.1", "172.18.0.2"]
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "MW3-4"}}, "device_type": "microwave-radio-system", "device_drivers": [5],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8443"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
+                    "node_ids": ["172.18.0.3", "172.18.0.4"]
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "OLS"}}, "device_type": "open-line-system", "device_drivers": [2],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "cttc-ols.cttc-ols.svc.cluster.local"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "4900"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"timeout": 120}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R1"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/3"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "device_type": "emu-optical-splitter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "optical/internal", "uuid": "common"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf1"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf2"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf3"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf4"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R2"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R3"}}, "device_type": "emu-packet-router", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "DC2"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        }
+    ],
+    "links": [
+        {
+            "link_id": {"link_uuid": {"uuid": "DC1/eth1==PE1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE1/1/1==DC1/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "DC1/eth2==PE2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE2/1/1==DC1/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE1/1/2==MW1-2/172.18.0.1:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.1:1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "MW1-2/172.18.0.1:1==PE1/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.1:1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "MW1-2/172.18.0.2:1==R1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.2:1"}},
+                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R1/1/1==MW1-2/172.18.0.2:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.2:1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE2/1/2==MW3-4/172.18.0.3:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.3:1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "MW3-4/172.18.0.3:1==PE2/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.3:1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "MW3-4/172.18.0.4:1==R1/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.4:1"}},
+                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R1/1/2==MW3-4/172.18.0.4:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.4:1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R1/1/3==Optical-Splitter/common"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/3"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "common"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/common==R1/1/3"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "common"}},
+                {"device_id": {"device_uuid": {"uuid": "R1"}}, "endpoint_uuid": {"uuid": "1/3"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/leaf1==OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "aade6001-f00b-5e2f-a357-6a0a9d3de870"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/79516f5e-55a0-5671-977a-1f5cc934e700==Optical-Splitter/leaf1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "79516f5e-55a0-5671-977a-1f5cc934e700"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/leaf2==OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf2"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/30d9323e-b916-51ce-a9a8-cf88f62eb77f==Optical-Splitter/leaf2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "30d9323e-b916-51ce-a9a8-cf88f62eb77f"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R2/1/1==OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/68ac012e-54d4-5846-b5dc-6ec356404f90==R2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "68ac012e-54d4-5846-b5dc-6ec356404f90"}},
+                {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R3/1/1==OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/367b19b1-3172-54d8-bdd4-12d3ac5604f6==R3/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "367b19b1-3172-54d8-bdd4-12d3ac5604f6"}},
+                {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R2/1/2==PE3/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE3/1/2==R2/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "R2"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R3/1/2==PE4/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE4/1/2==R3/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "R3"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE3/1/1==DC2/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC2/eth1==PE3/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE4/1/1==DC2/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC2/eth2==PE4/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/splitter.json b/src/tests/ofc23/descriptors/splitter.json
deleted file mode 100644
index 680829e6e..000000000
--- a/src/tests/ofc23/descriptors/splitter.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
-    "devices": [
-        {
-            "device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "device_type": "emu-optical-splitter", "device_drivers": [0],
-            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
-                    {"sample_types": [], "type": "optical/internal", "uuid": "common"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf1"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf2"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf3"},
-                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf4"}
-                ]}}}
-            ]}
-        }
-    ]
-}
-- 
GitLab


From 79f603af82cc449da9d1ca1afdb0ecdbc459cd22 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 16:56:37 +0000
Subject: [PATCH 174/229] WebUI component:

- Added topology icons for radio routers
- Increased topology canvas size
---
 .../static/topology_icons/Acknowledgements.txt  |   4 ++++
 .../topology_icons/emu-packet-radio-router.png  | Bin 0 -> 5508 bytes
 .../topology_icons/packet-radio-router.png      | Bin 0 -> 19322 bytes
 src/webui/service/templates/js/topology.js      |   4 ++--
 4 files changed, 6 insertions(+), 2 deletions(-)
 create mode 100644 src/webui/service/static/topology_icons/emu-packet-radio-router.png
 create mode 100644 src/webui/service/static/topology_icons/packet-radio-router.png

diff --git a/src/webui/service/static/topology_icons/Acknowledgements.txt b/src/webui/service/static/topology_icons/Acknowledgements.txt
index fb04defd4..de69c89ce 100644
--- a/src/webui/service/static/topology_icons/Acknowledgements.txt
+++ b/src/webui/service/static/topology_icons/Acknowledgements.txt
@@ -27,3 +27,7 @@ https://symbols.getvecta.com/stencil_241/289_wae.216d930c17.png => emu-optical-t
 
 https://symbols.getvecta.com/stencil_240/128_localdirector.c1e561769f.png => optical-splitter.png
 https://symbols.getvecta.com/stencil_241/158_local-director.6b38eab9e4.png => emu-optical-splitter.png
+
+
+https://symbols.getvecta.com/stencil_240/197_radio-tower.b6138c8c29.png => radio-router.png
+https://symbols.getvecta.com/stencil_241/216_radio-tower.5159339bc0.png => emu-radio-router.png
\ No newline at end of file
diff --git a/src/webui/service/static/topology_icons/emu-packet-radio-router.png b/src/webui/service/static/topology_icons/emu-packet-radio-router.png
new file mode 100644
index 0000000000000000000000000000000000000000..00257d0e2ee357dbdd392a408cfdbe07e006ff2a
GIT binary patch
literal 5508
zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mJh`hRWK$QU(UbmP}{o08eLUg@U5|w9K4T
z1_q6ZwG(YU4m-#kjSqIc*wrNK!fG6%&b>&fFX*UJghp;_n5>W9-zGI)&#vyp526Y_
zByW86;L)1Z&8rnS>Kb<Jve4Y+(fQw-OE<~J;@$Dx)&0B68v?Wqujb5V2svvcbg^T`
zxiwv~>jey2^1dXxBrTKk)?4<#a^Jg$k6*{mNUxm#yZDPn<YY#>i4}b>+g$fJ+HB5z
zIp=$4^BM)sBhQaKW{aKhW8&*gr}O80=Hs?8&R8P!`G{kZ;r&BJ+?$&g3i%7Si-az&
zQGC1UP-XY#s8t(|+5Y5aj?7g(Svu=*M-r#u5k)6AR@W&Biax8|x;k0jy4(C|?z8vP
zn;GM3P^7bfM|9F-_W#ZI@6Ot}($id1fbmv*&hKQA7dKd6h2H*Wx9#mO&Ik2u>$WW0
zAH$qx@44P=>jl9JyLn?`%uOr#cidrQn^$sjg3L+(;1f?9z8n8q#&e;byJYRoy{6v^
ze=#gsvHGd>g9ic<r-Q%kI=<UFy88EbpT+y-v+atOXwIK;f`Ng7Ey>&6h2cL4F4((#
zG6MqxXMsm#F#`j)FbFd;%$g&?z`(#>;_2(k{+vmgTV9UQ_g)19gK(p#i(^Q|t+#Wd
z*T{y-w%0prE?LfaYl%?Q3U-dCVdoDPc{+4V>QIXlkoJ6K+9BBE#;K;H7#L@;(k{bG
z=_Bh@ab=dHr<*zbr?s8#=9Efq;8^C$>|`?aMnF>ZH2&W*n{LjvHO@Y}>s(EI(V{KS
z&)kd6{#IW1zf_tt;ZVPdWPiN>g(VCEO}Uf$s>G&EEMfNLX4v;Ll_65n^ZcbP3=bx+
zW;&Vm^|jb6iJHKREQ_C?6wUPg+_NNHcHP#vOHYmKzxgMh*%=xtyKE)n0)F}Ro-XSp
zlg)O;oRJ9jtXlVM)_t(J`k9HR&8y?SE1O=od7|aWz~K2Ss5jzYVvps`!&~RC*!iv2
z#FAmh28EYXrB>FQyZp8MO3d#ShG`R*u`@)!TPJvGzU}^F&8F)=a?g@uu-a@itz?Cp
z+V!fsxvrl7S69xJ{ldgh@^qh6r;XH$t?xvm%NQ28znXcsso3Yzw}#AjrW;e)8DuJU
zxXJOe)Sca(75CZFcUmX|!<8WO;_`?~(+;eBmvZ&I$33s<3<qppU3057zm#3S@Y&Y*
zk6WH`Gq4>yp4IX(-*fqqio$Jg7#yUdMZbx#-H(?q`ctmwRkit9RrOBRHg@Lu0apH<
z!R`WLQ+f@LP5CxWwk~b^lCxjT4mBNGx$4!fL-#(Z%X%HOe)+PnP|4RIA}`xBK~v?{
zm+PC8Bd&Yw+Vb%C`-LJd5e9Q6eK@viRb0j-cc09yC%h)@Gnzc_o1)4B6&ZieiX+V~
zNhiG~#m)cqzuqORVZ(wjHN~S(3*PRXWOl*0VS|S7^J$IymYVvv_`XkUUHwwiA>xBs
zW{Xes=XDno&*W^E2ybQEVd<u~)@tVtz7yXCu4<WIG<G<|w0w(bWZ0w<Hd`hYodU1u
z)&K9R$oemuw50p!8HEWO6hdx&($My_nlHy7Bv#=c?fW#T|LBVFOTQcrHECq7K3v4g
z(88Ly^s1{<2bTut!WSxL{cS}>Gq16<u%0W4ymcW}O|W5-z@*cw&VLs_q*TsysOgOB
zRkICpRoVUO>!y`l`1JbU)cLh8lZ6Amds``GikGuFMD$g2xJu9Z+`uv4e(@jqw!(sQ
z^Oe`i)GfTk(kynZdo$<BZF625nWcXI%sRc#U3Kl#ZHrV|j;JOC|GeHh<M=g|Cr4IJ
z67+}=uuiPJ7j;=PS5(g+D2#2tX+y}>=#b6VXO!pg&KF;x(sFJQm*(mT*O?!fv$2SJ
z2j5~+NOYX0nc<N6+Ww9y2lpTDM<t&2r#+RJEzdrzdZ*XI`Y%%b<rzU0x%)QvCoHPd
zd09A%LxIP;C}O9a)Y0gT`>t=io40<a*z5I1jgH?R8kO%+{g(V{dHi;UZyr_im-K4?
z|EoJm^ib20Bh$hXja#jEI)7?0Tr<&IyUiow8UqLS8qbaQ&p*0#{Dq=J!~~b9&zGVP
ze`?!*!Mb6C!mcezx&IkkSd}M*&2{+YwYq)Hyrtm`iH)VVil&C0Px)$I#VjD^GI83|
zics0#FE||{1Y)8-r#wAy`U{JK4u_g<|E5Vx?qB3?*r3p{#pblvq<0J184?@IGg&80
zRgt~$<OmBx3+vydSGOo!5jMa4t6{@|?k&G+;@#z@e=%9h&%wRNTl>PRuXAV3ab|7U
zpis@X=FaTU!{VAeiHv(>r>F8xys`3RvoB*J<Cka)Db3cqj{1r^4ae4+DVq6OZ)(3(
z5L4h{R5I=AoBHc(&w3TKobmJY&-}DxL1x7H)(s4isp@N)CvCe>Jf)>!&75hb1#Q*}
zIw$<XJh%nKL{znxuySyBO$wd8ML=9Z=Y{Snf!Q;HZM=8{#Cmi>e@?jirBp+ZG12kc
zrdL5qObR*$lcqjxR+=EDpyT1ZhIO8egJ{h`uksYpw_lmmR=ca@&iT3de#WNj0s>+V
zW^b;g*gq_ss(xsZN=u_awT$M4*ScQ2Cf{?3XxQRaF?V^`BoPH22`SC6MeKXN<$2D2
zdA0DM#5Inkq3RO_jvq2vyX3vXru|;Gu6*eJ7E&dg$asls+A5uOwfmQRexbQQrDgjQ
z!KA?D%cp)Zzv$esVZmgNnB!Y*PQD6PsdtD-P}RM?<!RyV^X@MN9U=sLqU8El-gMo?
z)WSM<X{zx$(FZ<j-(TQv*s!4d)~u<)3zD<WE&IBV^O5-((erzj@-w=qdM+=vXX51E
zqqf#z)1)QeFFb14uweU^SuIZrOaBP1<>lb6x@;2sqHz6#swgP|F_y_w(=&4yZDmYs
z43GR8n{sPIR~@%59|!lI(_P0a7!Nh&xLh@j<o)4!{<_C5-^s$hjERn#D_5=L`4Xs<
zc0$kdx5{1Z%>7H6wV9e_-UZG|*pM^zOH%m9FR=o*zCKs(db47QGoO8V)Y<2UJbq1C
z(!OJ@fS8KdwDW%(a<6MyRLV}<av;~$lVj%8##*svzKWRaxl8umF;vm<n6QEA9jA`1
zr|GX5@t;(5PAG)_oO1QmR<<7<RdolIbxtf~;ZdE==*2A{wq#1^2dgZLONaJxa8IiJ
zrPP(8aH*<sH(TPt1F5D8nRn03ZQj7(rSV&C@)wJ<%^Mhs9#(oj&)DQq^6mWkrInWs
zOWsmGdOi82@$~bx)9g2=Kdl#6xvT%u#&iF?U&S7^_b;(DKi$!~c<WbxmrU0<pI;Iy
zJ0=NmsiiJ@v_{7v;zD$kWaksrDs}-e6@UB9*XK|E^3T<u;ZT#`(nO8SKrW_3O$wK~
z6j!%hubmmk2#P~dE8eXhpE9dh1jJM{A6oTA`)=;P#@@nuZRPUyTdMy2Nd(D!(Y#u9
z`qZOe{g<R0HXMkG+UMo$EqTumWU$84xrcXL)nPx9qo|-$;OiW_^l4$+N3Ft5>Iym>
z0f){`4ec-7$UJGEyT601j6U<$O*5xWcpGRU$M*64q%VA)^D}<9R%_Y19%9;{_0y&&
z`t0NGNoMDMTKQhO{!+As)gatvbCK5`|APJq+5Qa-yOt~s>F1f9xO~atFCvGSR!j}(
zS?(5H;BZOy%cY8h3$klCE%Kg5N$u0g{CsBq|HgSv5eAp0O#QhtjQ^tdlop1ynpqG0
z?=iNpGBj*ZP>8*r$f%%mA}EZ3gL~8T&}02v%q^@1d)9!m<O!?Tt!FuubR8ll_-ft=
zlVVcPIk8G4=XY_Cn1arUT_P?~4I374M1IxOWE2pqm^`(Ak|0B(qezabOC|>gcb68c
zCNE>6qv57kpH~<#w6I<j7I+-lut9-qU&`SMkO|vFe5O8QNMu}^uwhHv7KTK}{K!_X
z@SgNW{|XM)m0DGwW`2&k)9r9bN}E+}w((0-hlt0%!Qvv{rk!7QoguMzdN)_~{`X5x
zFW^1K+jhFua%#Wqu@eGf6E=86#H9#Dg-zPxF`e;{l>Y6s;481fbuvRkO~3CleV@E}
z$<`8Sg*6{HD!g2?OsL@ABER@YSwdH3GS_X?OlC|xSg>QyX>-%1y5WV9%T`5hyIk6^
z;n?w_>-k?I)vT6iwXkw<Z%O&hTze_(e2D4Uqb0HmYbL6%S$C<xGrBe?^z8k~8y5VW
zuIy{z!RHzEenwH$X~$%r*Y~aWoip@&ts=XSyRpTTsmJiS&*@diOV?bUb~NIu%?wSJ
z7SmNHVnR>bt-tQ-Am`#5$-$AmL`U@BKS42tHG&UK6H6m+Jt#i760GuG%hl(BpZ8r$
zjGQ({MQ28R|3#MOq_s=Tm(>gYoTIp<Qi#vE)!|T+-pf-v{d2_|*lzip^-)w<Gx32<
z-P20O6~&RBAmd{=wKG;_O`3LmOX~)P#9rORt(@vdm;(GWyJtE%M5yTOUwO(jx3uDs
z2`Bff_wut6400xvZ1A;HbWM%s^V_cmvO-FH`cj|JeV49roe^O=BxP}Wo96M)atGob
zt!msPAaJcA@|0@m*3Q++9NYreB!t6Og<Sn?8{<Bm>5!Ddu^FqnHw1N``t&zO^JQZ4
z8MP`2fomHq;&sn|Iqe%JyL02JRp&44-N4nqN}eG!RJZiUyf;g(CMv$<omA(|&&-(}
zQ6jbfQ%zoIMx^It_Crh)Hn1JLv`1)zAJ6LgX-b8WT$6RJ91clU9hxN;xIj5!j?2>x
zay?6V8#b^VYg$r#d!Oc!<d?NeRz>bq(s77T_6pCv)HQRPOz>5c=POgc2@8l#alLZ<
z(s$p`Y24vAgE=^|*KnRz%iY<feV|O?l#@e*vv0(<pbwF1Y`0RtLAz01XMSqZ1K(>Z
zIt~%c4}CnPYh%xt<yK0ByjQYlVa-2y=py6PX1k+Tw>-F_y7Fs6>9Prz-5Xn6Ei>kC
zQ#$39v`j!ijPvyJ7Nt2G!BL;VseLt*M{wH@gJ2Gh)hS_oZ>z&I1WTs|CS*?Bz>p|<
z?%RaF&y9XR&t7U{+}f~#&275#@0#VST9!L(SS}zC_ON2UVu@$yM8C#_Wniv%L~Z!0
z;~K)6+>S{PUnB@kJI#}Ly?E8GOJ%1r&qw;CaW%GtYH&~5c1-Vo&e5lqxnN69rLH_>
zFP-^Sa!UF#0fB1;1ycLDX0B3NqMOFWm?+wHl_zmc$kSQdth&Gn#@Qpn_mbztRZdeo
zr?ei>Nt_vTY55;--`gKedEZZ*=_Dj3a_r`$YtN(pvHC@;=(Mo5Zj5pInXatYUC({U
zDI!3^d+9Q*>03;hjaxam+a_)B@(i`T_gTtw{xdO$hycFu9n&IJJ6AWdtNgtpv3X)N
zW1{0e`A4Ob>J(niQCzBZy#Dm_)vK!fE~W1@KIZBwEOPk0YOM8>l+fztZR^kfYFqNY
zxO&0{1${e>m(OkO?>JAoYCOrVXU#EIZuip<JC;n}Rd>SMFIx7<Z&OeEC(|4vCYXC~
zlm9j8Na{oZ`Nv@kR9gO6zPqq*TjMvOQ!ee3rEe^1-k?xy=3$k5FW${+nMKyBtRLnZ
zAI+U4VD$Ww-hGq&<ifnvr1Otw3W^<SI`h(|?rO=ls;t7D9jn|9O=+3ZGQsj%|JPHQ
zHLKU^Y@PDl>|JaNE32x`Z2pQ@A9arxu2Q=eAf}{qVz&3MxCOeoKgGgtYYN$X<IYLs
zS<SP})9U2$)})^NpLO>h%6LSm=$sIF-@laKaNpC)Ib4a1hqR_F4G{lkx=%D=&MMzB
zkZlIjT2h0x%%*k<3WvtdtZ7<ezSGttVnX2|F3qNO%%2<Cuk1eHqj;!^Cvx@4$Y&Q{
z81ECUG}KB}R8>ql))%6G$87P8fRNRoVs(P#X%ognOf8{Y-Yes7T-RCn{)oG0$A$$H
zT0|FrDT?)<`anYZn~0Lmi5~ByeG%8chRmF^|0u}lo*PP<r#^p=nXZ|lpm)lth1D{l
zhtsa^X|`?Xq2wHo2<4_!UdiClt3?O0t+`jcP0tBGt*oPv$lI*IseNqU{(w{^<5m?N
z4VQ>oSE1_GswGE`&T|qHTXIYy_@@{D%I|+!<?bgf6G(K-TD5AIhb{lx?i#z$O-2(p
zO_(Hb>2me~+r_-63{SZTi5+S>V!^xPxz?%!kDMZ=v;+hlI`yDtRotUZ6ZMT-A1__R
zxhZx3lB3)B%R0V>oXm6UF0uH$_qd7V`{ZR4T39(FW=xy<nthK-<kr2<r#1dGJth$(
zcBskajYQH<@t~N{P{Te`CW(^slb`NWy)0mG?1oM`s2ue;a_L6u(+Lvx2XdP?C@gL<
zHH(b=XT5&Pmhek#dGjA0(n*{rGii%lW~uj#)n^x+ym5d2j#`fh0ew%MbEj6FPTsC0
z?<?aQB=&#XDT(49YmP+6JNz$$f+tCJ?})iJ-7wgqW`^pS{%apsZ+p(lW}~C;9q8M*
zK|su9*=M;!ik+t~ch!pZE9rR5+_0-Az*{U_KJe<A%Sws7GHINjL3M_S>9!Y2Gljm1
z|ElVLqbVcKv+McMGWps|sRedRS1`S6Oz~Gd)YMT?`@%(y-?~?E)ywM(bz}^B5}&$G
zI9{b%^(SoACy_)&9gm3{YU*bscWFPgkWy7V)HF#r%%||En5c2<<EF?%H8&JqCM*%T
z6lv7Axztct)VNi-$?<#5jft;Xf9HJfG@X&h2+H<K8>W0Zn)_WdO=H!|?{1M60TPFu
zBDQ9(&b?aGb?H1)OX~&&gVUC^A8sF+x^hL>LX{;dEeH0@R(qiy4vJX|`5m84X5Ku-
zc6;iFnRAbB?X8whbhNP4N&OO6#k(wBNiU5{P>dzT@~iX)(a?8~l9m<BFnBSK-J8??
zM()$B<@@tzh5DE%^luOlJK_;xX!l^>boC{75^UMMoLX2JBUYbOC=~3}3NPHaTp-a=
zW|2<1$3{)d!beeaHB<Z_HY8lIwRJqcJ}7^oXGMns$TLg=DQyPZ_tt41IqIXRs>tFO
zQL8%XcijG28<$O3s>I2i*qFXYMmzY#vM1a3PUm=}l&Gll;e_NQvp(05g-5}eW`jk4
z{8XJ)9i81X4>cZKP#v`<ouk;!;(YrKoBZ#Ipyb}wVww`zDk5&&I;BNGBk^jjM|;RG
zRV`7^2o7$W8j01*?*B^`o0?uYaf5(Z#RI3aGPkZTJtH}JMa<DwkjS!Ct5T=)Ye&pC
zKkozf!ddorI-ccae+!gW$K`HzyR>(bScYK>Ynl9p%PN1DtXj2yb!w~iqEA}u)_Ykg
zybO!#o+PlV*yGagXuF#AUbpmLmd-leHMz&IJ2W(RVo11l-lQ#4)0j3q7V}*8EPKD<
zGp1R~&Bf1U-v2L^?6<U%;mxV(rjz2<{&cwO__`vw-uL%C-^~m=KBju|OC{?~Eoogc
zyT?%cqRzb=sxN;{eQvui{L<t}ehVW{J^%mhm`Te~<G)iF7#J8lUHx3vIVCg!0C2F_
ARR910

literal 0
HcmV?d00001

diff --git a/src/webui/service/static/topology_icons/packet-radio-router.png b/src/webui/service/static/topology_icons/packet-radio-router.png
new file mode 100644
index 0000000000000000000000000000000000000000..025172a587890341061b11ae57ce30184b8bc2f0
GIT binary patch
literal 19322
zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mJh`hRWK$QU(SE22U5qkczmsvFsHgp_k|F
ze#v=r>GylqE%#=B(Q|bO5EA*b)<aChkyS8cO2c2_z)g;hIUJW(e^J`|U2m`2LKT&p
zzwL_)AK$$jZC-wQ@669N=fBs~f16`z{9fkX|2xIc&KNlK3NSEizWU9c?ZN*oOwFk`
z*J@sVJS$tZ|A_!o2ZOVL0Mj$W&Z!FBmZuB^mZ(aVSzop;J$Au0>Xb_4PH9G^HFw_D
zpR4LN{aDVhtp8fTh68f`o*k=KZH<{Uy;@M=(5b!qp6m3>&AoEv$foGMtj%*%-Iw_F
z&wi@=Q^mYo(V=DP?mutS*51szeTu>4>Hh<p3Z^iA+ZB}&k+4XDP0HdV(~en5{W|={
z^Qu;a$$eF4i2)gTG+XJ`tQ)sk&dB=-Y?#2bP%(9~y;P06t%*)@pTE^HgMgbe8E%#b
zFFU?>eVkmc0?QnbrnTBhk6b2OF4d9SVm+~2_QBaJEjRjYTaVh@y4IVR*m?TLZvmm8
zQ^rDHLWHH#U06Cc^t=dVHH&;SIgX+2@3GYKQccUn1*|_7W$$7VToileV`sEPTjsMr
znJ4PzP7?TD<oD!Kgi`~Dw)wh7L1X2!7ZcMZ8xH9$`IO`3bcf%vRmI3oQ>`WOyG6a2
z(=}zaB~DR?9(=Z(>i@V{pUEX+=Y{WStKY`5J+KwO%&)3`<k}@JzT%okHEoG(JKj8~
z^PeYo+kdsChu=Hr1`h4%Kkpco<=LG$v4evlu;%h+iEVH9W){BQ+N6BPYP*ld?-weE
z4HRo;O6ml^Klo)~_10PKPoC(pbZjV^zW-p3@1HKlXR6cBZw=MFoNS%R+iH35o8;jG
z+2@KcPL^F;c+U4z$A+Sb+vVR^8Toyl|6s#`TW`yjecLO!v3+Y>)9tgir!3fcX8hdr
z@?_sNkLPlgE)hGAUr*S0tB#dnxv`4ajU`iBc0}YKOz7OcmzAgH!KTI56O-)1dDZ;3
zRA<Lc%Ju;T>&tNS)hzk%7%mw#Z_={)@nh%dxaNmfQxl(Ecr6~2ufq7C^-0T({Jm!S
zoMtLaE)i`dt9J)FZ45lHDR}bo<Go+aST26-JnX~sdGBRC?gv$;79Uz#EcN+m?p@Ei
z1Vx7y(TIN^y38(q+%`{*ZO)}V8+59zRd2+J+12S?)t+p{xm4Zy-f@faGY&1O0ru`k
z&g+SunxVI#QfI>fmZVq4-}d+9=orKX3$^KmzwJw_J>_yOvwj+9e?ipgna9iXJmSBV
zN?-ky;ozX`&?0)_-NzV9l{Eq?I${l+Df*lHMZZkhaOn5`Qp*)7Pm|Vp2qsqUD`Tom
zQP6+ta7_0>X?Mlr<C7F4XNoh=+pt4cf#JqYJx$|BVJjHTw%pw;-*zQayMoQVWhtBI
z-!H0%F7>Yu$&`|vFOi)z!zHx&&yC2^iq;d$7aV3$(y_O?+#M{OSSc7&-(?n^TiuYF
z+#++vfXAhc&3VGf@^}8HPc*qlK1vMNxhJJ|M657D?9QV4?gbM*R3%9m9o60^AF|`j
z<A#v7zvZ*P#pf&O)UUI9fA;Ne(bu-p9-A1L9wtAZ#$WyAg~{oJrGkm(|Km?*8ElNM
z<>0@z<y*^aGx@c*_~qB$Qh%o|rog@6{@#}x_ZQEd^;I*u@8yHC33_S`sgWlh?bGhu
z(DSdqk>m6Nxo7u<yk<tMb1+e{yDar;n$7}CA@%j@&Ug5wA6yXq`DE!I=kGSoYWFy`
zg3Q(jwRUWnqO|mXolC^8?+X{Oo=fDt@wAYqal&EWA5J@SeI@R%)N5gxS=7@pH}zpR
zZ+qgYPkR^5Z|vip=q%5k=vq>rS(`D{ZS7SJ$CjmRy0za`4_(^+-({=#t;DY@qs6w(
z+sPIl-16EnL^r81vN_su?W3QzZch)rtrqzHnC(XG!(|J4_6ROC*x<<eBkgkF^82za
zqP9s@ZJJi~8>Cn}He6Y-^!+}Uh+p64YaOau>&q)~c_Cj<<Ob$v@9lIg%x)Yhs9ocK
zh3(J%tXpezk3YDpy8A(*+q4H8zJ+=nFmH}J@G5!wgQGuZ-{p9H@!!_9hhA+d<_dN&
z+O&I)|IRoufy9*`C++*aDth9tZKmOw`dbb=9h!CJZ=vYAtH=K}{{Nk6d}o*boPB%K
zHrCv^8MgG0Smd2`D)tQzKbswTcKJHXZ@2c=1MYjJ4?buU-Fd(MR%z6P4V(02|J&_o
zDHh03W1F^1V4C(sp~REBP8i5`Y~Xq9mG1n6gS+~E<pe(cv-f#U_y1AuaLSm#dGB2i
ze_Up)?1wqtEB@~IEV5_ohkOs;^8$bN7T$D9s9we^ve_l=zn)vfgl`F&|2ui@G=;ia
z6b>1^SQMHdCOD00!j~JaoQaliepP;#ta#inJ7LZ@j|*3RE#-E4G~rr+RsFm-_w(<0
zKQ7D2?u!?aX<jJwzH~jm@~rUUYAF?$h<?3!60%XNKAG$@u-Q}oSLVq5&JAC7C~dts
zlfzqDhS{%6>X6gZ^~>#A67BN@{;uif;Cy7K-fq60>oi~dld`mOc`o6Yxk5j8o<I4C
zb*@ma*Sigu{NMdFTNAWbuts5XgxH7f3tI&fS??5mp6TQgVb^?XyYNa?o%XWL+hyCg
zi@$GT?>Ax<)e{g^t9sY!@+oZjE`wFEx)=RDM6|XXK4r1>yMxEk8Mpp;ww_y`(f;&y
zsYu3V!9><s?k1Ox2Om20@~M+>OURK49Y@k{Ic#0@>Ek>vPVK{enS~kcOD|3`XpvCT
zao%z9ZpRz}F|Wg)7wenLG=87{zLBTXyrDwOev_}S#C=P*!V4>d4xJLQI<UxCr+HmO
zYMNl8=3&qBy+vLT86Tcq4p%HY$F`%=-uKEso5X`3BKN0VFkd!DspnIlU(gkPYr#a#
zHm&O=Du;|#tS)wnkofWQ+@shJcdsQky(nORI76}V`<3P1UnhO|dO&P~zLAempps6r
zo`w8O*OsTs3u<k9m$z(v{fGD6whxEq{%+Dro>DpO#BwRQ6Ui#o?W<H>&t4TxG<_Y+
zwoT9CefIr}HIFz15+zGYSE%Zo2{o<!DfjN;rT`7bLnaIADt{~pSDvx)n?lXjz&-a5
z{1SaI*{+vS`A+QY^&F??RapzmEx8l?IPQ0E_x|PU=l!k8c>a*vX_aa9B<s`Od*{w9
zO?p1TUHbX|HEv>Gzw$A;MBF=g^?lG)folg(Z{KNRusm-G$E#lcY3aOqFSisQntS7d
z<?Dw*pO_CCx}FvMaQ8vjg+)$*%kSUi^tQOh#lG{|jv|gAq4uXMncrMLch{72$+nX>
z_7*8joVI*LmU$nCx3vzl*Ce4shn(N~hrMsl%;xW?duA!8BYsBsUE2M>?lTSkou8X<
zyUyv#w;O6x6TQy235fo(U~JY-<lM_Vh56F#7F9FzcU$D@(o63foznE)pWVeEIBi)0
zTc3gDp-JBB()susSMHTQynszKr8lbnkrB`Q?VNdcg!lRCBzCsEZ{O0U_LS@Ov<(6+
zXPjs6JMQlm>9C^tx`4u=Pf}a{iR!pT%n<td`D^>bX3<9{zea^<Fm0Zf_w-9b<T<ID
zWyVzp%YNj(kG!}}f7=?q|F=tyyewZ^79nB&EK``zzjV6WZXJKYYk4w))5;>)rl=?$
z>dFn`<cr&<JS&F(KKH)sYZ-eo0<R`VKe;Eli|bm~h7B9qmh<M@w!Z8OfB7~3;rH|-
zm39-Cb6whz!@^P1tjA`4C`s}_lyK6)89x$!wlB<`Yh+Zx)f=P6zAt7ihxbc8&l76a
zZJ8W@y$haeD;)Y%5}IM$2hF*cltgA6{=2rX^x@YsQ&oAL>ZAvE<}OcI<FZa?%1Y71
z&bt~_i?&~pP|{f|7^>dS;Vm1t>*e1aA+;A++q7Br*Oc`p{oHYZS(Sg9t?3`HQ_K~K
z_tb7wyjrz@!&Y$G-(Nd-^FQA={d}-aM$9=-YtOQcQC;!;3(HpDvfueU%(|^p4!>Eb
zeEV8Up;YL}K&AuRXZIg$S^Dnhy{|42FRiC<J#**J>SCiR)nmc(X9W}vUE(=)Ku{!a
zZnWBzvk}J)0^&SYR~Eiqklh<(7yjeG)7uxaekCohWbWKxq%UKY%5^^YLdcE1YD%pp
zKWcVz_<6L5O4MD5>0S}oxwXmn45Q*f*G0++KTpqfHEzmU$HQ=E-+Z>cY3tZ}R)ydC
zGjXlrlCux4J15^d|KPPp%F-*z_ujj=Jgx2dYt(#4Qp|39q`@NQE83wKUjO=A{N3)$
zyq#WOUiQym`lq0CMRm*N4*MAk65g%R(tdjE_7}+)UsV@XFe&LA4S2bF@ucWOCoUxX
zsEn}Ah}<~idXIIXtz^}oeAO6lQN4RwrW^NjoX$>|@IXe{p=D|^2Xk<P&>^R@A7kaj
zdR_#s?s?YsW?upGubSOblP<S-H=OkKXi;qsc=vlQ$LR%j;!11UmU18Rn<(^Y{?}|S
z=h-3GczR2Z>mR<{`C38u@=mUjYhSq)rUZ9)cAPVEea>BEWxYt`<gA~EHJUm$^gQwu
zw?1-DC`==xZQ}l1;Vn|1H}z+}57}`{xkOCfhJT}dj=&j)k2#OME-cAOta$lc*KZT+
z>SqFpl`Z=xvI{0kUfCUVQ))th!T+fj)WxsK{@GEk{NYP(+@){Ai&{EV58Qhb(0-~$
zvgGW~Lpn-2@eAIxTRypTI>)M%mF-NNdPMyO|GS$$yj?I&Kqe(<=}&g;?+1^s{?6U^
zu)c^Z^sJ}-#?R9?oZ_ATh<};Ws#Oopi_Y!b!1F52@{rSJ{+L}ykGkEhobayA>Gr9k
z49q^tPIBt^CTB_f>6|~axNJ_zYqgRU`W_MK-|9ue_MMB^$DkFe-(CX^v~Z`0j9)Wn
zYsTDY3|N)ibMaTQ3;PC_maauDrraMt7oA+lomYG0kXj2zH|sKO<~K(B1Zvnick5hV
zrt&!B*~hukm!{X=J+|Q8*{x}yF!<`l$$fVJtWOQfYbP^V-qjX0I=pGRmGi<E9Og^j
zEl)3)KQ&_ig{_G@*SqSMG~80<+VNM-Eh2JyU%h<HqD{d8GXi#2feQa9R!|MY;MpI0
zML_J<^gka2ZGOJZx>5Xb+3cN5Kf4~BByMf}^wgxPtY*!L;`?uSetFq1k!WkRV_|;8
z+OYE{YsG{TUlzJ%EjAXMW@f=QM`UYDE1S)k6Hk(s|FbGQdR9)yY2%C5z6Q<A0{3fA
zSBn;W3tJU!e`lg%q^PNTSCW!jgywBA*^MS|E6<fK$S!F<nR=DWcEK|LLk-cBW@)&z
zEamKJR6ino$VuC1^BaRl%Y8Q_%$Lq*n6~u)o_gbTT3eQ<$62&%B&zbn%H7QWa&m%^
zsrD+zDIDIsQNP}Kw=B*7-<kDZGjXAVN`txBKi<vTIHs=>pA~X;?IMvx*6lCuE3GQr
z?wfVT38}TX$0>qu;run048dV<rn-9M-kBzn_%LPSUiWvLD+Pp=tv~LUMQx*6-c0<+
zdhT{9SKO@ke|p;f?^d7qv8aXh?5`<?*IyS*<LnODV%NEWXIBU7nV>BSMf@_yHil>)
z0)=QsZ%(lAz1MN^q6M2;mO4a5te;rjbo#pJ-PVf>cQXl;-e~3UZubjbv`MU`^?c5U
zoxL&AA^VwXOcz+rh*|&Mg)Pf5Vh4Bkii>}yX!_S345(4kv0VT1bGedE?JwW3*K-7>
zT?v-n*l8WA%~{;Gt<gZIPUEtPq7H+ASNfY7vpBrZasT==m&1F0-Q=scf)7pN&3<v6
z=U$|e%(V+Uauk2O{mCaFE2p$_eppNE<c?Y?p~RDVg0W=^hb}F>{bcI5mJL@}`nqhN
zu8cF$*Qwkn{G^{tJT%Dr&>{cBA0~xvGgMsYm*4*8y8gd;`>MWu{^SwJZ>#9gvQ#~P
z<%Lk)#Fe$Pl&|iOY0S{OwKwIShGVa(s*dQ4fbhS{4lPUT<+-93v~5@-XaBg5bN&+!
z+q!ADCMIecs;oWLs+;#qFj2DP;?Dy*N;>ilZ~8T-2u%yAl2lC(3QCWg_Ca9Xl!(8V
zTIVPz9Qt&;%i!1?mxyB@7S9&-;_%jLoIfkte&uqThX);Fln#`IcBQ}eXi2@``kZ-l
z$A%h)P4>$sDC?{gIhpl%mCU!=U)L39>?qkjduN2|@nhPmZY@vyMH720J2&(^bPu&&
zBkHbqNZ@vSldHy~`72o8m#utmsP$vY^QZH-H#jT`D0ot;e(00Ly%_rm9H$p}JLI&7
zZq0}bbUK)2sT>t@+EB@(<GkA1cK66K^T-I(<vEQR6@~xOmftsUE%G{a;i=`kIV=)V
zj7mDqyTUs*%$lmr6n#EU_)p4VEz8>EQ<-hYzHPp~@P7H~hjCTQW}kWXwEMs`<8xI4
ziJ5GB7qWs1hrM3jSGi@ovRO|))Gl9e{Y+@V=eSvGJd|`IJ613=fLd*mA2_+sPnKZx
zpS^QKbKivpC64PC7X15W`@*((YJyd&*ajuO!@5pNI_q~H2x#iu!1MIn|DK7r6FphW
zvUpGSUTMGM_xi-u-HR3#J4Gy<+peF`)b#md>+Sc;bxuXte-B=pt62HZwSnXG{vXx3
zWh!d~j+Ho`IVh2C`g`Uz0a2}ZjZkh?!#j+J<yxeU6*4A&dU3%P+6jIg(jfYL!SVA^
z6}lf%1QJ>2`I}tSsBZuIW3~5&P~A!5byC;(KD?d3Jt`_qY|p39VxZQ~L(K@Wh+{4L
zSE{dp_u0$O`*^iH)$RWkt|vIH{^R#sZ;Ix(^mQ&i>~!E;PIkp2FV3^22mKG)ZN7Hk
z;OXtIWnus4uC4s!DRJ-r+S87zbGg@BsVN=0bZ0K3;sg$Dg*yxO3OTj3KAAFW-a|7<
zxfA=ZZq(azabaIt*MrUTm+y<`4iA>wb@GVQikW&x*{%vryRlqBa9WxkkB6g61mnwT
zbF@`mBJ{VcI3-(?Z}l`TN-q7$xvgzmnpPORWT`2-rE6Ql*!Fh^<0a#}%<kQ@loKK@
zYvrw+9?Pk{>HUkz%Q|chU7y}_GDR!k5YMvXH+?^DySVj+*4qtF_AEIM>L0x{k6e3H
z>8^U&YW~ULZ(3hw^K+eA5pjaY{^-_bFQ&}I6m`}I9UR36xwp=k#QI?R^LY)X$MwD4
zcD0wwe4CqnvTEhdm05j4=Oq^N3r;iq^CGSF&g1kNJL5OUdp|swSglf(l3}p@@~fD=
zQ<6#o&V4R6KeXwvIP38*{hG%`S8?$2O<MD(r+Klv&v^q^Zt>{?LVhhvZ}{$d@6ocf
zTAWK-!9Bv_)swF&FaH0PvM7H&Z@~n^x7mkx_!%}iF8{+AK1tqTe&p(hD;(xb?MzGv
z`u^*K*K4Vp&P(L%-Ag1tx@UY%+k16KD@u93zGXu}f!8f%3A=LPH8#Kc7py6p+FiW8
z<JpIRgZID3>^UjBj@x$sLFa$+ZQB~nrv5+O+Um4~!~5+!uBV`)Ly&uhYfEZCytb-N
z`_JI;_wD?ySpw5^C$QJmuG@Qi=e0wBpC|m-<2yld!c@lO-F5Q!<W7m3>{irqi^$wP
zeYWze@_Faw6<pjZPHS9m=eygxb3^Bbo|oYP-Vq#!Z#|x_P<D>(;01P@>$5CZuzpz)
z+IG6sH1nt2jE#Oj9_%Y!nsn!!S5CN^Tg1%g{B?3c%hFu;d2ce<AkrLP*~@WyL3dbV
zq)P;s!=+?#e-7@qHr2*ct*={^D!X2IGd=ox!{h7k4$VrQ&Qf2$GPHEYoyCj~ZcdF5
zR@O25dTsu>_P075E^Z8h)8xXJm{|!YW;Q1u@ccMs!-WaIUrK&B<Uc#{<U;PQw_Kb?
zh1(nauWIXCyLD{1lpoW_s~vLZn0!w9-N&mxl!HnL-rJyYn{{V76D<{fmfTgW$p4vl
zu;h5n4X$UL&mXORH8p73GPemE{Gc6czxmDIj&o+jNDEGL6kp4<xnqM!!;<5AQ37JO
z_I`XKDq&EqYjfs=P|HG}e>NK)J=F_1BeYUNP4Q4wNz(Og7f$ic`qY~8=;2g`WKiez
zR)K8i2A=1aj<aPtM*Q&n_HNSM4^P_;Ptw?XXO)%Dt9uL^tokOYxkN}V|0c(=QX+V^
zz1`t+Txzov4h1!BGW@L(op@}^-3wt)r)+q)H2pxr?f4B3pNN{zkxMtIouhu`;;d=f
zJjKbko&K#T@Qm3XwSlWFeh1_JH<pjD^!x5Ew_H+Ey1YU6I{T$QMwf`TxLuQufeO>_
zmWpe*x4(D1AG!MBk^{bqa_iD>zRm0J6+HH6n#YfyJJlD2ef+a%#WUHtOC$<GZSSYE
z`dlK|O1Ca=+4}fSsa}!o&xgw9DP9pu53fJJefVyB|Bk!Y=d!=dt95Gj`EYiD*oEcm
z3RvYptudsoxO$7}_xHgcZskWSo;D5VW-!qT=6J@RJ^k;=@|W*wE367--|SbJGbi7r
zd({WW^KN;H990Ty9*F&oHc(XjYINzc*uiV8&uiaW&+?Z6RV3^9Oj}ypU+3%I;xsmw
z7j=33vQ6~C=en~B79HNHbMDHerX5_pKc{tm?777<vKyq%|4H;`XtTA5S|A*jvAU7D
zDSOMWlM~Bs*1f%Rw};!kDkbmV)t#SKJ6`u)Fx$07^o87~0Q;pat^M=odq(M3?C9HG
zC;v5z<?!tAsaGEDUVA*@&7u8wH+4KxSaYuVc~q&l*n^ZELSo;;0(^D_2uwS4Ah7z?
zTc3&vN^{zr4oMvgI`U|i@;u+_6KQhyEM8nZ_S3%l1)tP1K_-_7DMrbRq$vW|X3o~U
zP<~D7;H<`J9RcsIt#@r*)a7%#@*f+|oV{XscgyXsA8P)kKQD`o`E|H}nvP(S(Cmnl
zx(k(-hL)V#Rr)mX)||pq&1XYSEL(R<P~lKe-_&(grv$G(yBwZ);Z121|6FZRqr>kH
zTRXh`QyFrz#`Gy8&&I#3yY=pf$cSIx!ljaD{qD=`05i6oo_`%9RtTpyO!(aMy<Yv$
zC%a>HGab7&q~%(&C5!*nt=MsIVHT%H%`(#`9}U)9w<-1fOm3Gp?5z9xP<<g^S;Pwa
zIw`v!_r1@tSJr*ZdpCCq$LR(8#Ff^BM}@cF=D(D9@7(34u>JSeiTS(;@;5uYLg>V^
z_jYGxPjEjy^{Ai!imcdSo3y}brT^56>fL1i&JNtfu;)tqf$u^a{)uV3L`b-oYW{4T
zot1b{ZHDCv)i3LU!-BVd|69z>R<mDh-O^pte--&G5lyu1+w*;mqUp}IqJm2jXO6nI
zJe6E^Px9%`>3bLRdtT*WT-qA4@r_to)QZ?gA9d$l;|*4~pZrBU$GSQ;U`tqw>YrBu
zGfgF~EnKqkCI3zK_{-`Gh1Tr3+Rkx0`oyoucl9l;ddGe>yj$0&*_yijma}5qoGII{
z9J5&eKiBG!TAcQwplZHnopWc3^Ud}8Z@X}kdU9ru8HWI*_;NhNmFOdWMCQ)^xXKw{
zOT6d5>gAv3e&+TQljZX`v}>PlnkM4#>ayx%Gf8M2|NrfV55>ptp0&PTA*3Z*rZ4c&
zwDq6p8#xQD8K1gd>wa7L?Cb`%KW~x`DcxaMJb^8LJx}VV&J9x@F4-N&cj(azuZGR5
z#7=U*b}w!J@Zk8<d$kw)Vs~@<+C?s@ST!dlJHUo>z4G^y<xg{dfAHe%V|%JE_V7oi
z9jmS5W$WaQ4SSkb-(RX_St5UHhfvM6{WJYbj-I-pyX-$_dfqavdHU)ttt!d;OTTI#
zoy_QP?AOluR=?UyCBDhFw1jW5_lP_3f45ZSmGEkojtyImn<%L45)zvy${G9jzr_~b
zlJ%j-UR&)qspmd(yVUEdjiu6>$JXXc^ndT_UB$Vw_yA}+;)C8NAIF8VV$b63>u>+G
zEtt0<;YQZmrN1Qmq}JBmuNIp(dw1Yjfpz+V)3Q$R*f(&TUZ5wYv_?ECr1dDf{(;o#
z4=zR>{e1A&^<9oD#LsQ^yYKPPj#buG$0(m;I$yGUP*+N`o~!R!r9+oQ&K(d``!;Pu
z_*<h3|GHE2mhLuqc<=aL>Fg|rC^xY!KT8Z{c29ewVxI4!F@5Wl`z>7o7x=t`%O#v7
z1g9z9d6Cz0<?-{E+5AOIpT$bM?I~Xq7G&(=_IKaiw}K}77E~^-m7TGxYQIfl;7t9q
zHHjjQE)i}YmvqYpwY0K-*qgSlsdxE0tKLm5?FX)1+`GW#-U^w;o1Q$Vl$f;Tp6|Kc
zv9AhEdE)21pL4+Y?~`>?6Q@d*JmO!ltHrXc`5}uyqU5=y{k)S-x0k-IlQNmRjbq*N
zWtNH!S7(Rsy>wJpc9YbM4X^w*x40JQ+g{F$Sl#8Cc#&H+@!vb+cP*u9|J@UxzV3O-
ze}MgD$j?aLPsiSSx1<KhpB5CGwfF5C(-)tva+$NlWd}EF_q_5vZ1di~W}gUO+`h*q
zdkRV{a-{EabGfuO2PlS$%~;2?;q;GYgG;ds<l3SWxfedS6`A?2^E*>Lk6_q?-zSuL
zrwWL1{Y!Xi_v6M>8_xfI)(fvq?OHicT9~<R^U0kvSm#CSR<ATR(G72ztnL=^EqZ!A
zzt)HN7Rzs<tNyKdlF27HE$jNrBnH80dUuw@c`j{9-M;z4*Vm#O{>~}>HT}=T#5;W}
zIxK&;cC8Uw-S_YCRg;q3Wb13K8)aXo{EzI}VAPi*DHydkGJofJCncT8aEWcqg3}yh
zS5Mh+;ZL?E|IW`kXWUNZ`<@beR_3NQ`H#^-tJbs2beo=R;fa(?YMHtz_oATp<$2Gq
z>}s*&ysEV9{=ZM!f%~^T%{qHkK#XbY!zZHeo?Y15n;9>Cth{gH5hLT%e6ssv_^S1+
z#ODj#UfL-XcId*>K<4AIe0qVASGQ{jhP{h?<r2a6b!*fiCkZvZyS(%Nm7d_8_*DOY
z`9Bqw={GDk78__DYD%j;HRE-uh4z$3u4h7BBG_V&FoB0juFn&gcEhi;{_u0I={L^h
zh=^@@5#=us>v@Q&;lsD{brNCA=LUB)Pnq2T>Y;aTDC$qPRn&2Df1`6s(D~^39|~pP
zS~tdI$Gz36`ljk0vBJILc;bClalO0Y7m|6BlRk+W8y{4>b6#TgQ>lLr+gpysyxwxy
zXjyzJv-{FBV!Pi~FZbq&n7`sIujuaB5Fy?5EgPQP5xSK2;q^kpx9J^Ul@CpF4w%1R
zIPvA>{7q5SyABs|h;=VNG&lI~rPc?Br~bZkkNHuA>U+VhbvGNLU~2&sbmnNUxqia-
z;M3P!_c#Ply5;9I6FXhkh;Mf}l>T>i(Z{fLS2xCG#xkpYpU^+yde?>z4R(v%J_j$e
z`Pm#RsCZ~nymHkW$Cjn;>oqS}E^lcK?%2!8!)tVKv5t=HxA@@CY=Opym>4$tJ1gn1
zcDuC4c5EnlVWO&)?HFOvA90Pf?o{fTs9niE`9~w=wy5Y_G2C+X0OK0X6Pjh+XKS`}
zdlhL$YW{lV+_F@^Uh`U*_Mt<Zt)HSkiU!UWkIOz3#KTp3#g@q>VpsXX4UADjVrhK2
ze@;4WulZo{`GVTi2b=3&X}t$^RFS&+TU6FOY42a~@QVF|U$)QhL}r9vms*+-7h@f&
zCX~3csoUza0B9zv=)$B8zv{QMg~{($>AJGTuJ_^3v`|rH&z7YUTCZL-F$hj`oZb@F
z^7ZO5Wzf+6O$|=bef*q82ag5XE{M9gr|W{sp&%CFQXvOWA$i(~`;b+|OS3IMb2t-L
zCDnEF@i&G{H!*t3?RNOtk9h);uf&9&wi$rhzH|A{C>{F5c;ep-rR6QHEmv$31!Hy;
z-}n5x%2mgpIKcbGkEcc+=S%vIz6##1b4Kn`)U_B;b9+TI2NNj4N?EF|Ik;_q!b`>H
zi<S#2I^NM+<)mn=^45Y=x&H2}wtM3Krp@V6p_5#uf_e()*wX|Pe=?-h`%Dx*^sDZ5
z;Rd}M@0NZ0-W=_Ce@4;GdiigU*&;Taw{*;i*uc3hs=9EA+O>`ie>N)h7^*|NdCOZ$
zzr2dgFikd0*<rI+^2!3HKlusV%PZw<PPM4b*Ae-X6Z5}{pM#%M$YnaJl@B=+6&bhA
z_@_Q+=ge12HeG47k~_2gcg;%agAdac>*Tmhm2~RYa3r7cY)R#@&)RfY==YJscPE9M
zIJ8Fhc)}TZ>lAxMSy@nydr^}hCOD1X;oEVMtnvu^cQ&l+|Li&Hd-eP;^X7%UOZhJr
zPPn0HYuBYW*S>#p46>=uGTKXjxp9R@-MehSI!ETP!iT*NpFUyt+jT{29{;s{*La<p
z|689|0!>VQ26d|J7;ef3YurtIc=(ywe7&~h>yzeQ(V45ywXOf<S`C3Kh6UeSrDJyL
zUv~(u+17l%{Ke!8^4bR@iiHv-PtU)3O+$4}c>PT-`#-gpI9Y45Hox1N7qHr;?&^!0
zjSmg>Y_6Do+oFz3>Q>^)wyA7?y1^-|N$Ak8+V_zadGFlJS?nq|8S><>`(wCyHN(Q=
zm;R{KgJQhI&Y+v)G`qs@WG>4?hrS%Ic=p9W`LyTWJX7z(cW!L643fNj(PZwn6K`!!
zPjvfveQ)~1qd#ZQeU{Mpa@Hh+lFB}{We3~bL5Wmvnv%{&CgF;_tw(Qhe<&>Wlb)Bp
z^?%aLgoRyFM?VQBJ{5ToV>OTC^n$+WN^351mmMgN?zfDTOG!%jd*Yqk+~`in85_Pa
z?Ac$l{`PtO?W_1^Y-_up(Vlvtb;ZU=mk23lDUC-*I93PFbTUxM+&g<#aFrR0ijc0f
z*s2$%#iBVjrB^+5>=u>%6;VBONvQJiDWyY3EAl69aBA3jKwnq>#Ijp&bIxCpEbL~E
zbiZ`=KZii#&-?6g7ZsHLEe~4gv#YpHV*QyXI|Fo%ocgnyY4e*m-QUxW)IQ#6A~jPQ
zl%H2jU+kv7l|Sv~Rld(HLDIi3mDI^PAFPZl%lh<X$HskEI-gyVXL5=7^?9aJ@8<~N
zcwVMw#jbN}FLg4$J9Q!TsAY#v_tyU<`M)+SuU*9DyC|BaV?)VntIVUHBZT*JF+EeY
z{QRM3wa-7BfI~u>*RL+VZ~Rtg&fb|^*WcTU$evH_Nl)}X^(EqYOSIfskLI2pP~7g7
zmd%e&PjV<^$@qJT_2Fwq-34BP-Dw><b`^||>hH6ev%Hclk~#WzhtB~9?y`pZAmJqM
zOfySPBglFd?S`XSyEzzCWuJxW<uuB-ZEJk~Jg=pB`g@M3-h7VZTh{X~zIB!9&;5DZ
zqQ75Gypn(W!TILruC5}RT@E~bV$!!pZnAjF(mUS$4f*jWK9s~srPqL#)x3BtXsoPz
zG12d7-n=!zVnXvXdCR7?p1&^N#vlH!`HRo<bjzBe!++k+v#C2)-juKVOZuH%jY>yO
zp|{EznJY|TvU^#61kAc`^fu@1Z{tUNQWsTICYwPT;trlClecc=V!Cl4{MFlYh6cN8
z-@dV*yL&3vM*EzG+W&WiuG~Fh@FDB9l)<`Uo`gison@dN>ciz{H~idEJVB#ACg!r1
z!A^JP4ldrdo!0&bPwR0qM_OBJq`KXy*}3z@_dB2*!&sXyH}wlwa?<_>v%g*5P<CPI
zuFryka*Ai~)QG6*-e;b1K6b^!#y{oF(T<0WT3PDdB|($+oZjUJ_m(6|F8$<o@XYdP
zr_G;SH>JMWS0Fs^N6pH~K4J+)UQTbU*-AKPE`fF*J(6_7Zu>Au9K4?Sf5*N%xeEez
z7d)5SV~{Tl>d{=`@j3K8?)$Gh?@nASnBJD21n%>-J1zvxuf8u?$^Jv8{r<b9=?*79
zevUb|k$aNxqhD-7)0TKc*B)JPkuKhoD}C5OxZOZUzW!(P!A+ZTZ~GUV{2p|<_55Dh
z=l*B4MV_9UZx^$X|B}nOgBvdK&1*h7MN7jff34>JgRXI@nPN8{YjPIOQ-3sR>jbM8
zvW!YPd#eK+>btL&@iQ!vu{YI=mI&K-$#vq=@L;)umGS?q3SGC<-|Gmt=v;c{m%*l7
zUy0ir^;%BdG5Pj8k9Un_nP#=zF3pf9i(>9}a-2?h$1iWYJVqkh{;)YW|L*iJXYUng
zZu;^3Zu*0>t=4loI=g2x)%;iAle0?vEca%%?M!FNmo9mj*O$jNRl&7Z1~lQHqwCV|
z^(xh9BlpiV)i0S$=S^2Hx^*e~`{f;X#o81+OnYutEq0de$Pec(XkWVJqVK|>B`f3w
zr#W74xS3Two3Ubk{=HArcRO4zY7LF<N!@=hejoe3TLmmP>X~g?TU^>(52)8l9X{|&
zG~}$KdF!eNi_Y!XtuE5j+MsIpQ9NPBznay0zLipo4qaJld#~~zTRC&ZKQp;@P7|?)
z)H&h-w@)2?P|qCg5V(0$d1py*#+t3qxwAVq)HH75e{K++>n_>wX7;v8m5U!-xcyfo
zyTQEWz1~gU&f9(6eVm4d6B6rd<~_Z&!Rp+Scf1PgJg2^i2@jfl*>_>m^#J!<iIO?I
zJu@Ve`uKd4Ke&F}zczU5qz|8q{WXkA?tVOdXXe$dArH@RNi?@^jPSp@njv5R9%pfx
z#dYH+{+AY%IO;vvlGB)Ra_7rs0TZ)VT;9)df$y|~x8kR-H@`YH`Rx9w_R#qmXY6aw
zsLuEQKDY_wvmK4<=5pO>-k|y^&E5OJHRJ0$8ZLL2&z+~6*3H4s*Yq(qX-CY*A6ML0
zT=ZSoD7Jv#M-kNa*f&eb%FgiG5rfV@KMg82=lfU&ii*9nXJ7pP2BW!a(1D0U&WT>@
z+YFW@x;jcm_%O|XTC@A+PA>la#cLn^+;KN-s#4|MlncHK*N3$mK2tno)FyAKedc2)
zC(q#{pM7tc?Gg{se&r`(9wdM0^!}WQJdrOV*0R)m4Jp<TkyY%TbVt#)&F;bDY@XT&
z%hxTO?G%}@l9``TNrzdNz58mL<(=EsK2AwHzC9E$*m=b5;kvXx^Q~PMU;XUfdQg3@
zwD-F+EeVGWI{3rhJZ*9`?ClLWyeH<*71NU7j0LPOn1jJ{H0zfc99NG^l~A)*bz1xA
zXJT+o|C^Unmo&T#-Y!$~DJ5A$K=j$hTkQIG+nztmYZ1OanKku6<u&cKs}KJ;_jL!z
zuos3`cIGJvP793rSCtg!E%11XSBb;lPoM_cx^IU;3%B;B?tZw>LuzJI<)NMD_xoMl
zJbB79j+s3=);`h23>$tKKPwf_>bqhZ9R7Z}d8?(9^>-e%Lq;9z7eC7NXEEN;md|(0
z`Rkg{C?i&$Z}N9GDAin8Ef{g=D(iHu#&<uq?w*u6Gtlkqqn|sroc(ju<EH!61+#zu
z5=fLh@;q&It_ZWi-28LKy;_I$tNpr{Ih8Hx&WzkRBRufH=QZd5S+U5ky`{gZdo|OP
z+AFK|F0L(5(z(0qTx4PQRWoUZM^k1s_b)7DKjwd8dC8jPe?eXNbK8zwGP0l6y<W`l
z-PEOT7SChKeNgBU!B)8LXx433hOa-L-amS-_rqR!``C@^6+w&MW^5?g{vz*np_Fu5
z^{Fp6mhHRN`;0q>rDFrrZF{b*$&$r;bmt~YTy)mpF{$4f%BvT<and3oF7<CaW>4C3
zhT+3(S*Lg(--;*;_RYsPUv}85<j}G-{QSo+eR4mYMS}yL8Lqs3EJC3)F2;IAzy%ot
zF@5VA!Fhf$>MQxV&%D;;bhhV~Sn4UbU&*26Y50$=Gi~}!SH=r$*k2?cB&1|GLFB$z
z(vh7pzmjrIgr^mmK2_|A+aNnlW|x9x@7&h7m6wzMe_5ud5*^PWkofX+eABI2kA>9@
zc@9rK{zz%w2BtkN>4nq3{tQ05z;gYYY3mby++ViXAoZx+#YqV(b}OG3yDReRl=iQg
z?Hu0r`-HAuN!t3Ckzwyo*|5ErSmXZZO3Uo53NMkd%b0g(vtmLZXa4rX;qMAsgO}!U
z#FlsHoZdIz$o5@q{%f~SUz-^Or`6S{`bB)~T;7;?%Gzp*wg7MS{a4J9Wn%koRj}B_
z>=ZXx-4t+`<2!$~S<An#o7%IxIL=v@UbTBytN2R!%7zQCKx_FDZpZ7{2hVl#otwyz
z=n_#?{-|T-#Az=KmbZl1W=(CAZ`*cu8&Ccdw|~1rH<gGlGyk`y-dJO<|Bf50)D3d2
zN?GG(?RPba7ZY1kv9*-9Vsmorx(ix+HNUVty<^(O;r;xd*>QEVM2R%%`#ftnEw&}g
znx7VXW6ho{{+IW<t5KIyrb4Ac=ZckekF74Q{r&Qe&Hi_S{u~k8Qy70_ITSCSlrW_>
z<azf+_E*B7en`HbpzM5$J4X!ee|kQ{cnj~BHKA?=x1Ma_nXw^7JYj13#<s7l6MdGf
zGVAXBTlieFB3h}GH|)mD3v1<Uu5Vd&`zS-I{MTn*hHW`YI&*(tl*#|iw0Y}?vp0;l
z@h7aTSlPz;{ewV^4lB<+Bfk8&soW;6lO|^Wc=K#({I&zzHeYw$t<+ifCnZ@UOU#eM
z<EH!5fMxePH<avS)A`u>x-l`z`pkid)zZQ915-qoH5_z5Ie(3%!Y`j?9wjU__x8`s
zxFtEoF!`>d-qbUTb#_14^W#L7+x=ymR%Wwo?!V-_P$~Y|G(VRJtM6NmX6@!>xViP=
z>#15CuieUmQ?KrfUismaestpJm#Y^&-gRAv_wp~3!dtQ@-(E5Zy#Ige8n(yQ$2F=_
zd~dpk?$ix0Q#*8N<85U()u|k&8~=astymVQ`s2~cG`UFA`tO+%-=F*KsI`wRu&I;U
zcYCYcm-XR{YC1PLJ%v*DZTN8HI&+l6TA`nzFP%WO;;GWPof}Ht6n$QC<Xlf@<T>+)
zi{pBC#P%-d^{(rU-Xi?$t(B^l(v2e>X@W;fOm{4Hl0D*8?fKHpymelcUU`r5p-UU*
zFJ8ON+=n6fr`n&N^>Y`59$jR)jVqh)k>anJvsX54l2Kg1^S$ch$N#ONWgpgb#qSPS
zt5g!aLTuxmtMfU$kN-0}e!DI~LgJA5!#hhFCzxOQ%p_D3S<&(D<g33EHoQ}~;kxL`
z#`=9H0)A|XH+~TsZ861(_ee?b3bwU(u21LiK5n-?BKJ4rf^COc_FS~Kd#HI<=g=#2
z{l9x=p5Cr^ecq~YIlDJkHQcY374YrSoZ@U%{@<@<Y4rciJvXyXr!*X_ITVu}zSKfT
z;-2DhvBcE5Cr^Jrbmpx4+*jPEmaac3F3C2z+T=l3RK=|q%Ps^zDLQVUq%-%I<@pzu
zrp*z*9ryiOzjfuor<vzHqbr}tOMLxpwqwp8hX9|50)Y^%ls4z^BjvHar$yO(4##Y3
zDEY8z#=Mf?8N&Qh)jERH{QhQdyTxY6@cGB9dgB$WJZs_)Dt8;Kyf>S>{J<jS=dQ;;
z%X^%*%{j)>m~3^W@%rs+C0f4gT`YHLhBO7ed*j@)G<d&z^kh2|M(b(o|1JA5ui>MA
zmejTC8GGMagr}IQ>N*!>DEc^FUM={gTl4uB>*-c$U+aD({Z+hp#V}%)+<jFuonViR
zQ6<4EBv!>-pUC08T+ci@*IT0D&4jX=-{o%)D+)--EV-eiQ`GgIvpiN{{YQf>g{m{I
zEMAy0F;w;B&!pKQZQpm92ZXGdn#U!&+u(Ys%ArduPwRf{6mLlMvb?fBN<}|M{<8N(
z)0Z>LX6&kxulaXf@ghUOR%_)uD{J?^mDsbrgn!90?)O)?+}#gcx!3#Pq*bcw*Cn%^
zT=ULMo!hbD%ZswcCAGD$rZwMmjyf6DobLZ4@57(B)lIb@-*9$^By8lW@mRY})0X@9
zr<KnZF)jlosjqh~&*$)N-`6KM^~R-?B(qPU_1nE|JL(rrTVeX+N!pu3`x)<ZcWo6D
z?K(8w-}Lj3vVQ&WciRk&OeBt#uHx3;x=QayOM4zy=?;V11xBFZglkn?n@vBevdvik
zqv$z*HIr4izNW=h|J{Cve;j?(Kg+N#%j<mGhZ5%Vc@jt89IjZWsr`*9tZG~F)j4-(
z-%!rnrFo_5s)Vzg;55F!60-Au^mZo3Jy=~=P-Cw#RsYmUDb>tmHq#XhldDb66t?UV
z=_wNY?39`DVp%{t_hoi1aB;YHxxsPuyhI5#>vo>HxY&OQ1>a0&guMU!wf({4tB*Q=
zo_ccraP7aXYa)EIzp^}i$j4nCwd3)jxzhs<yVO@~YZd%m68u7V`-?mwC7ruFc@89P
zeb`y~t!$O&&O;j>J=L3|TIBilgF<b}?O6uPYGpaN!|GSe3*Mo3ckg-EOY5zwJVQd>
zTcsv?EcUvPe=TddUC45S<u6{>+XzlOS0nMSD(U71g=aePZ=cT!ZS1`J>Trwd?wtw&
z8?S+ysU4fWChn=*E~Wg+aFblVXzMIXn=khr!v5V9zpD9V_v1fn7zC%ymt9cy>qSMh
zzc6$6kH_<JgCxV`_HkTyIaQvRny#{CVXwCLv<=~_z5RYC?-4teoA_tiiJ5yo^KpYa
zHlf8<`n}gdyI!n5&sDu=CMPjtO-OFf`9lf5HF3f#a^D}F9dqRG#MR}jp=a(TZ}bT}
zwRa20k8i9GPh4>@o$%!n52KRK*#%#E6*gb}X3YFSWcn*trTg5|>W_P!t7ur;-j@1i
ze?+~6UDQ_oOGcYrLbu(1yK$v)o9fGhYL@~blPgzN3!M$SEt#-TW}mD`w#3qZZtYev
zKg;)SE#ChA;EMa(4#unNb+0<NDIwX(`O##1DV_O|0r?CQ_DupcD^eSKeyJYHsWM=V
zkWh6Cb9#FJYtp>c^Y*{B<z6hF!`^d2JWJ>FJqClL%YEd3Eso1o*?SeVrb*6tf6s=9
z+<Ha_>6It%zmqw<m)XSW@a@Cb>+f=D_gRG+78{@CGq5sMG&{&)HktPmXk0g0M8ekX
z43FV+PVXcJw!+pd7pb(LHT$cXUj(i$NqDg~h}&lWp{y(O*I9GS$oF2eQAdWgZR0W(
zo>HyiWkpu6))|9FI-VGGUp3>6*ie-I)@WXK<U);_KPky8!mj)`4EIv}mwH|jw8$x=
z>e=z4hy=;Yt2HmT)vXNC`)UkYb#3)&spY+GlM)v!c7FO_i-}9RG5^cF+!)S#FN4mn
z&Sx#=dbqDXud(!C*}9~@AAMa<J!Y{Ar`&wI_5Jyd;#2AKgJm=J*a;{cy3{`3LicRg
zZBaIb-CkL5AN@?MnJyvm|GA$<sj}-8q2daT^6Vc@-C1%^cYG3asqp)HZc^-r*Yk`g
z1t$coyxcb_l}*iG{@3R1UzBz>b~6ZuJ@|Dja`ScJ&rwYh%d=~AEE-$Yjo#{<xmCoo
zY~3yOs?}|WPKozCyL6&t<-EBouIOL0ub6UjZtz3q+?B;zYt9)jay6Cse4J0+_NDK_
z_&Z_(lZ6slTcn>%Jz-o`wp-!amTC7t|CQr?aP^w$rvD|+9j$71WXad;|GFb1kmF6y
z(l^V$W-`rSyE&b=+-v{4srJiH$&0c*wm!=6tg(K^L{8P?)}ri(ir287<SeYMU1@z*
zRDwewk+n@eWvfB-WH+M&b*J9{INrf`VcVu^mEWDOPa3>CKX=2k85M3UHut5jZQ<&9
zA0uwiIDh-?b)U_56tDU_J+IrZb*74&$$GA2>#MCVHcWU^_wJ_q!w4^@9Mk;QKA%7x
ztThKdcP?<7_T$L=#>BRd^+z^+iI^9+CfA~}m3yC!X5qe8{>8`3)^MLUU(a<=?d|l#
zOP{bCB%ahe;1IC#+EzEs9}Ci*4}Lk*bkqIpbEm{dF1!8ixMyXxG<?$zQ9kO?W6YG6
z{pdcA0k3TRR+pATKfkk|Jk*l^<%6)Gz39iufomTAyw<bNcVVe&uF$WCmRFZo_<g;u
zcyfDVXm`Yp^TB7-^{;9CUa@9&u`j!l&fFcha<(otW?0Bq`cdZ9`Twt%MEriTh37}c
zQ@a^kpRUNr)EBw7FN;%ew{vS#+R;rvWk1e&_1t#(&Mk)FK`p26CjW1$JjAH{+3*dM
zz5mi#0p9`_%y#Pkv-rECON7;j1(iNYs>jaFd9eCd(&<+p64$@sot~uaci*S6u)FM#
zSEstZqZ(VA`FgJW(yqXeA6E=_PAb;YQEuDS|1RM6%Q;@B7*++ZxUshlw04PE{CVg0
zue?bQ%=fK|x4FtQFEiw1^4qC%@*gJJOnY?baHWdj#<u4nKW=VInE%C6)K2_Ry7P}3
z58uUBtyve0%HoxDWPe<jnQt*MaRz5i=zpo3vPoW|CnkQY*q3^{j%nGNJKWpfchApH
zv=NzSymMauL(8jQO4%Qt{@Sj3er1-}>Epe}?|hzTwoCJih-GrG@}WzO_PQUpu^u=u
zxh8ady$Op`^VXB)tt-2hue-%>Y%b5bW{2{%4euVh@0D_#`RC$?%kM55WZulXIOmN9
zv-jowmsQ!?OxCFU{uX$Sw<K7jJ>cDsxg6f?b!NwJ`x)_sl&t7tf3*9!)yL^-VF|L%
zJ@=!^ek@wCM}bYDKE&eAj_GQ*)O9R6R=?<3nYYNP+4N#>9+zoj;CH8v4NP}imDAcH
z79F0m>BiSJp={51ruy_wRbFj2f8VL2`LesG&CzXtT6D|iU;fH#yUQeJTv@C*rA+hH
zEag@Pme(Sed=vcwuimfN`E|K{H_x(-l_5dO$BtOpE~{Q099yy3S$2I?SF8W?Hx`_e
z!``$;ugq-lQQaExYRU=z;A-=87cHkwaV!ab5nBG*%|bA&VYk+;Szq>W-iWL*t?$X@
zzMEZT?kImO`0VXcu6xnDq}O@Z{44yq@&Jo%)|94`wpZ^nXtmDI<C?0J`lik$g7IB^
z@t(KFZH?D|WWB3h%|9hrQfk4mGjG$^7te2LU*~b9B7yNneRzMeU}BHxyx88C0q&bO
zYwx>P61?JA_pvwLEus(VO3yx(la%6_ZZGjhbgllKo&4|h?s0PS&zU}@|9sOsyE6=I
zKSF2zmu@l@Fw9gq)_F43Ei{?quE;9K(=%#2H!$5<FSeTZvh<VU6_NW(93y^5nfq?t
z_g_PJ*;-46_<S3tmqMnDALnQ-^cP+czf0iHj?XH4_Sfjgh_5v3<;oJQKWaWDkIS@l
zw_dAYBI}0RO80;4tMCY$5ZpIoVXt-}YtYt=3csZ-6<yIviB8vleF)k6$<JDCsmt=K
zXBGEqUODvo*EGi#(F6aCqo0=~9oW~jUdhhqSjch9T(5I0Hwe7W&doY>Vw)+Wz3b6g
zll(n<&Q>ig<=tQx=p8g|N^D8+jNtX4=0zC8Z-c6mM-sxPYtDohp6s5x(6v=bF1z>1
zr*HGEAD(Z%^gLw8>{(a#GK!dXKfhfR>cq*pXixd>YweC-wO82PUo_jP|8CxlMwbZ2
zH(r}f3;CGO7}toN_m$$Pv^^ovH9vp;ntSKx2HQ@msB2D7sqkwJU1FR0W9G^yH~Svj
ztZ|&_v})PH*-oJalIx5G!x(m7N!t3BwP6>ZX!lIzhc9;j4bALfF?#-fvO(ofxs%UL
zR6n~NJd*cyVZ4uJ=%=Gr+O-mQ&6mk+pRAqO8DgS;S46An<c7H&8<?(b)k)r_w)ErV
zZ?=I;S^n7V*_+h+vGeSW)_U(_!4Gd<Sy8t2!BsO;g_y<1uhg(kT{7=r<;OWb@7C}<
zz2v(v>AUnMWx=q9U8en|WnUExWS^}z-{k9CvA()CviGB)@wMO4H6NN%?mO~o6>P81
zI=3=KUHs(&m7VhU+#c!ipFe*@>aIxDE5_s=<wINn_Osko`BHq&_}6^hSG#NJ6Z<qD
zVdLDdj6bR_3!XGF>^&{^=-%JTD!-?iDL*P-X}If8wTpZu)0@X->v~_}amNOxEBzO*
z9nn-vIQH@C?VPtKS(A5}9d~|uQv2H>-_G*-rJtWRdft8Q{N5_{Z`RgJPOF$-O>h6c
z%kqB6CEtbdvCqGs?A-9@9aAFfnUC9!@-W|(-Tz2<dUWu7*2&(hk`{&-tP}d&!s=YJ
z`__k|*HQvvIb0ImA8WE7UAjAI>8sXrH(o3=NQik+?Ao!RhHvL4PTgxqiWz()-QQ=q
zem=DA;@(Z{k1enMIJ!IGrQ*k8EtQ=Id9@C;<b7ql|D84K_V@F;>rQCZz3VjHbM(mV
zBX*^yneK|Pty15+UR-e6cf&CI!{CvT4Zr_1O5}ldfHgc1kzap{|Ne<3#>a}a&Mb~w
zT~YV-^Y2U+vFM|VR`2*MlwGkebmaurXYcLaUQz8fyt>Q$?M>&ppt;Mwg60YAn4->_
zTwH&9*6gMP<N7nZW0Mu)T`YX!HnQh=iu7pAw&(YGb&<h9d!<}-RGL_LjcE6VN0HMX
zxs`H>Ixl_R=MusA!q$7wTi1jK+3i^~jx0^N=dq(Cyyki1&dc{-M6ertImq!g>y-1m
zn$xA~PgA7htpCm4-<EpwJ7~{(Hp}gkY=xi^w}R3ck8|UVdG?%G*_NaFQ1#Dut1X48
z&9>RE7#O%ULFWSK{SRqev4LTWTDq2|<^4wqNr~V=JImR<ZtPY}AZI8R@5wbb@G0KN
zQdu+A(5u$zdKF_vYnfK!3O2bd%9WmG)9y~lX}|X&^G@vBG<DC$76!pEh04eAu{vS5
zZ5cX#l|NUQeU%}3^Re>IM!l=vtP4!%t!{DodNaQL!S1!kA0)a>;|XV+%^GR=eYySi
z`=2E<Qx<?$BPGajZ9k_g%qIE#M;7mja7L#li64c}H9d1T3Vr$EXLw;>Rwu(|uenwp
zArXO6#@;8)b(#(q#Gfq**65#huUa6Hbq4$5$CG!>mMAlfU+e$dwDpGC)Q3;Lip<!Q
z)Sq+it6D1e;or7W4$f0oM*rbu6%xJ2SGPXFJ#=?P-HrO6+dhAkyDReRc5B@H`5dQT
z3#^`fAjwyT{eaKI{;026;TcDi=N}G#ccA+8w*#vd|M%c}AF!3>`-~lJ2a4rNqbj#=
zms<2HYOzSqdl}|T$;b~!o_o&~Sv=e6{Vz>{CBliUP2v?+GuCdKFVWCgvlTKI;dIC3
zZuLjCJzF!>bL`7wFLCvpJQRJztMx2ns;<!0o>KP2Z`&SkN)O>%R5W4zgV|1E;4S_7
z3wl&iO<Wr|yn`)@_0Ht@+MHnszN@$rv`)4@Cf@VlYyX(W@8NGI*4%1($UkG-)3ttv
z4F{M0%gO3k6@B)S!MfnsgRx3`HNPwu|7&b6IIX@wd|v61GXljW8B)wX-?&rnM4su+
zUhZ)^wO#+v6wzu%d&#3w6FMKhV(ohyab3M~!;dP9j#t0e9%od(wNy&zs&#DAf~<*q
z7TtZ}yKqrz;tD^P2*xMpRv31cHoxUr=6Wt~@$Ktv+pUjlToY>EFaE}wTYk+Q_T~A@
zI{FT4ojq^5noHyUZN}wM!cz}xEPS)LBzQ%|$`_!*k74K89N(HY#x%Zo)!W8vZBNBd
zO-)a{w=Vd@$5(#~KK5O<&Qk9-tmU4@d-%(dN@XWg*TaJI45AmyPF-Czr8XqE{H2qG
zU>L*BlS28wStKORhQEAoUgiAskXZlLBV3l-a@7-V-C~{;I_vC1#SdAtXMIRI{i@;T
z=Auh`d_(x|YW&Xd+q2~SMv!03H=7o+GW)2vdnr1qfu<q0FR7ikqG#eGV{`dd|Ld|X
zyZPliyH3c99ur+EadFSAS1I*b9jmI(Uiz@@jO5fgb3sj~2_Ng!4{<5XpY=F*x+Ghd
zWyqmhwbE{1FN7SPvW4eI(c#1&RgV*QOxK&YkCi*PCo`TM)M1)nu~bSZ^w6#52|IlM
z8N_lgdi2`Kymgjde}lMNi>QWPm961=)sDhl_o{a}y8ft2C|;jY@!ZkMC%#%BE!R@5
zGP%9-!TmQ8>}=Q8GgKTtk^fIct6i=n_{G$xf*YJVH!vMBt$Z~37MtN4t9@3Jt4$ih
zqpp8g)n@)~=|T6^-yAP}6P}QHJjU$M+9X9|@x*((%OZD_-mkaT3V-`z*@e}ol^?VS
zC$e^UpZU1$x&)iu<JFrBT--B)Eq`-gTs`ZN@1u6@?}eP7H*obwXbVWPX}*-4lzOCK
z&9(V;Nxv@mE)1XUdVo{?5SPI8h&9_H89vy=&z&sH{$o$Yk(sks8f5;Ii`a2rGqFY5
zYlbqTG50P#g?PcK&WgJ<c_y&FQ8w+^P{Xq2j>)r%+k9<}ZhdvrIsz>I|5MnR824Lt
z@zdjfcM6-$*|R94Pj0JM@%)~ki7&fYR=#mDZ`ESFTv@KPhM{o5%`ES9hE2-mw?nkp
zxZ_{E5P!RFd6L~K<_SCAvMf1mv#?O(#rZP=CBZMIr#_nQ*}35l)9%kpo(0;6r1(Ut
z|E#ZF8CnYJ|IE*7cbU538^eulyM?bl4%T&FWmCBI&qT?lJg(YZK7Xtv1*gS7thcHB
zvSNw4uUZ*n{M7YqChZ4#wST!-Yc47ZU66Rwso;5?)tp_5|NJgqpQ-p_*#-5}Dhg_f
zhqxHbXFQ&)X24@Tas8=Z*LOSLoy59l)m*7XkLCwHRDC4>`+VU{#U*kP?6V~#9yNpA
zdNoxj;85oVrUSCmDsJZ=a45T^eP`i=$#X6|P*|VQ?qZtzw$9^LUC_54F8hziO4n&u
z%;@7^Q-7;g3e*GsdEnM<u>IPnRTNr<5?LFf&s;kq%wsTBW>vz3XY0)8Ux_hZ+i@y%
zV~>t?xr6@q1Gl0<>H|J6723emx#7>-S%SvSIu{fD)=#XyuE)GB{dUH(ncF)~g*qN*
z&el2G>R*3k*0h<5GQ}5s7p9$7UBD`s`17W1T6U5%+l>7`vl6@>m|I;rxiO7z(V;I!
zGt%5vdDi|~8OkCbTEFq1K#l6>16JxY6=O;l&34)vcPYJINyq-Tu9aQkjLyV;&sQ6o
zZ<8%q{jxGJL}iu#wFi<@^E*$8dfiD)oY<Lf?rpyzY_g=&nb?xx7tdSYEPmMuN<S~2
zPc;1)%r;}<pZni?U%w7q*x{h46(0Su@#~e)--?;XIZv8*1kF@@a;L>LE&gX^cd_}Z
zU=8-!@9NYKecF6l=h~623_fL3Ic;X_`*ScMG%D7&@&s#**3H1Lt76&iy?Zl%QoNUZ
z#AjpY2fZsNsZ|7X7-*_0mNiZKc*R|wLnDUomw{V<RMeVnw;3j!UuYec9rrgY+;y2k
zpl@_B!?QON{(t$b9=KC#@t4NZvq?V_YNkuP2#Wppc}5<WsIKJQa-~C`7IQB?rXt3>
z&Dd{!_eK@lY0IW(RjF!)&;HQ(bxCS<!crgB*KA9<3tvw8Si3Z2wdGIqAJ5;_vzkXV
zBx`bRy!z)w(yXXtmW~Z3Y$3fCr!}J84Gwz!o8dn%hv)F@a8Z$DkwrzOewnPVp_L}X
zJEvBuyCSP1Yk$4*Zh7jy-!(cnO!$DwJ}&S0S3GA=ix*zv>g3A*TX&-{$jnA@g5BRM
zPP-po5v{1d8F!=fVcU~{ji5BTLagxbSM@`m7N0-!ahpn8WBO06m|34pTv}TT>Vup^
zByz0o`M1A}a^CUiggvOmZJ`o)Q0jS!YWgnCE4PFj)%!V4_uFkea{C(t^Uc(`-O)-9
zPgwsg)(!j^`>-P6@4-`hyNsRh?3&KzU$gJZ$;CQ%MSc~wX4{(zPWv`PYsv|uwCo@$
z`^@;&T}KxLB^sZ(Sr}xNzH4GxNKk`jZ9?x%MYb#J8D{J}*t!v1)%q_CUJ>1(?9lR5
zo&9NLt>4xK3cm%9f7!A4fKgNstHOr-JVmYW?GKo<eRMh!Wv&OwdsX*(oA-OqK5gS~
z-dY#+_}+|Z9H*sMXidoM^p|4bv7WCTaJb<A#GIW|SHw6TWWRPl?;zK;OZ;mJWiE-H
zHi}&Ntazb8;i50eUaWSD_5Qg#yu07|-_&FQn_&K*2qP2Y&;I{@PMt9`%FfG7Xv&WR
zQrZ#qTOS%MS(e^0`<PPU!ReacFWqm+kFQ8j;VD|I>k_f=%dgq{BXnl+r!hFpxwFM1
zB%*bhmtc3y^_aibb{qaxd}W-m_w9}pBPX#3YRm?9mWtnQ$MDWL*Q<W$(^BT&|AkUC
zzdqnG2#CtLwQXv5{QMhR|LwF={d_skp*3IcZmqztcavgM#opP6+jOV0UN_}7uvAt2
zCM%k>GP^<1q2+0EyUTHPK6AsK%m1g>*Yq8olWy!gH^{#F*^d5Dqbnr~*Q<o}awPXD
zE%W1F9=T)s9Kjf-eG*D>wub{eBrZ!R>BRru`d{DiS<v_O20XzUyQ_>&H{4CBS1ygZ
zqrNZfc*p0+HJ#5HW*Ge!TmH-^g;8yZ$`L=KMSFLiR8!KiuedFgUp<j^Tj?^}ACDg_
zIHMrubM>aqv-j2W?W(WvzmmxF+S9mo_8a~gYaT2v3l1w3KH#qD7&-UB<L5!V={b7F
cFa9&WI`T{V<OKN=1_lNOPgg&ebxsLQ06MY_CjbBd

literal 0
HcmV?d00001

diff --git a/src/webui/service/templates/js/topology.js b/src/webui/service/templates/js/topology.js
index b852380d0..1b34f2b2c 100644
--- a/src/webui/service/templates/js/topology.js
+++ b/src/webui/service/templates/js/topology.js
@@ -31,8 +31,8 @@ const margin = {top: 5, right: 5, bottom: 5, left: 5};
 const icon_width  = 40;
 const icon_height = 40;
 
-width = 1000 - margin.left - margin.right;
-height = 600 - margin.top - margin.bottom;
+width = 1400 - margin.left - margin.right;
+height = 800 - margin.top - margin.bottom;
 
 //function handleZoom(e) {
 //    console.dir(e);
-- 
GitLab


From ae072b226d9ee0876f3160fe5b22b7725ac0da2c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 17:01:12 +0000
Subject: [PATCH 175/229] PathComp component - Frontend:

- Corrected endpoint-to-link datastructure
- Improved identification of config rules by device/endpoint uuid/name
- Assumed links are unidirectional
- Rewritten sub-serice computation logic to consider intermediate controllers
- Rewritten method eropath_to_hops based on new endpoint-to-link datastructure
- Minor bug resolutions
- Updated test pathcomp temporary code
---
 .../frontend/service/algorithms/_Algorithm.py |  16 +-
 .../algorithms/tools/ComposeConfigRules.py    |  22 +-
 .../algorithms/tools/ComposeRequest.py        |   4 +-
 .../algorithms/tools/ComputeSubServices.py    | 170 ++++-----------
 .../service/algorithms/tools/EroPathToHops.py |  30 ++-
 .../algorithms/tools/ResourceGroups.py        |  94 +++++++++
 .../service/algorithms/tools/ServiceTypes.py  |  53 +++++
 test_pathcomp/ComputeSubServices.py           | 196 ++++--------------
 test_pathcomp/ResourceGroups.py               |  93 +++++++++
 test_pathcomp/ServiceTypes.py                 |  53 +++++
 test_pathcomp/data.py                         | 121 ++++-------
 test_pathcomp/old_ComputeSubServices.py       | 119 +++++++++++
 12 files changed, 568 insertions(+), 403 deletions(-)
 create mode 100644 src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py
 create mode 100644 src/pathcomp/frontend/service/algorithms/tools/ServiceTypes.py
 create mode 100644 test_pathcomp/ResourceGroups.py
 create mode 100644 test_pathcomp/ServiceTypes.py
 create mode 100644 test_pathcomp/old_ComputeSubServices.py

diff --git a/src/pathcomp/frontend/service/algorithms/_Algorithm.py b/src/pathcomp/frontend/service/algorithms/_Algorithm.py
index 0286e1420..6cc4c5496 100644
--- a/src/pathcomp/frontend/service/algorithms/_Algorithm.py
+++ b/src/pathcomp/frontend/service/algorithms/_Algorithm.py
@@ -25,6 +25,10 @@ from .tools.ComposeRequest import compose_device, compose_link, compose_service
 from .tools.ComputeSubServices import (
     convert_explicit_path_hops_to_connections, convert_explicit_path_hops_to_plain_connection)
 
+SRC_END = 'src'
+DST_END = 'dst'
+SENSE = [SRC_END, DST_END]
+
 class _Algorithm:
     def __init__(self, algorithm_id : str, sync_paths : bool, class_name=__name__) -> None:
         # algorithm_id: algorithm to be executed
@@ -44,7 +48,7 @@ class _Algorithm:
         self.endpoint_name_mapping : Dict[Tuple[str, str], str] = dict()
         self.link_list : List[Dict] = list()
         self.link_dict : Dict[str, Tuple[Dict, Link]] = dict()
-        self.endpoint_to_link_dict : Dict[Tuple[str, str], Tuple[Dict, Link]] = dict()
+        self.endpoint_to_link_dict : Dict[Tuple[str, str, str], Tuple[Dict, Link]] = dict()
         self.service_list : List[Dict] = list()
         self.service_dict : Dict[Tuple[str, str], Tuple[Dict, Service]] = dict()
 
@@ -86,11 +90,11 @@ class _Algorithm:
             link_uuid = json_link['link_Id']
             self.link_dict[link_uuid] = (json_link, grpc_link)
 
-            for link_endpoint_id in json_link['link_endpoint_ids']:
+            for i,link_endpoint_id in enumerate(json_link['link_endpoint_ids']):
                 link_endpoint_id = link_endpoint_id['endpoint_id']
                 device_uuid = link_endpoint_id['device_id']
                 endpoint_uuid = link_endpoint_id['endpoint_uuid']
-                endpoint_key = (device_uuid, endpoint_uuid)
+                endpoint_key = (device_uuid, endpoint_uuid, SENSE[i])
                 link_tuple = (json_link, grpc_link)
                 self.endpoint_to_link_dict[endpoint_key] = link_tuple
 
@@ -175,7 +179,9 @@ class _Algorithm:
             MSG = 'Unhandled generic Config Rules for service {:s} {:s}'
             self.logger.warning(MSG.format(str(service_uuid), str(ServiceTypeEnum.Name(service_type))))
 
-        compose_device_config_rules(config_rules, service.service_config.config_rules, path_hops)
+        compose_device_config_rules(
+            config_rules, service.service_config.config_rules, path_hops,
+            self.device_name_mapping, self.endpoint_name_mapping)
 
         if path_hops is not None and len(path_hops) > 0:
             ingress_endpoint_id = service.service_endpoint_ids.add()
@@ -214,7 +220,7 @@ class _Algorithm:
             if no_path_issue is not None:
                 # no path found: leave connection with no endpoints
                 # no_path_issue == 1 => no path due to a constraint
-                grpc_services[service_key] = grpc_orig_service
+                grpc_services[orig_service_key] = grpc_orig_service
                 continue
 
             orig_config_rules = grpc_orig_service.service_config.config_rules
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py b/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py
index 30845bb11..91367e23f 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ComposeConfigRules.py
@@ -12,8 +12,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import json, re
-from typing import Dict, List, Optional
+import itertools, json, re
+from typing import Dict, List, Optional, Tuple
 from common.proto.context_pb2 import ConfigRule
 from common.tools.object_factory.ConfigRule import json_config_rule_set
 
@@ -71,7 +71,11 @@ def compose_l3nm_config_rules(main_service_config_rules : List, subservice_confi
 def compose_tapi_config_rules(main_service_config_rules : List, subservice_config_rules : List) -> None:
     compose_config_rules(main_service_config_rules, subservice_config_rules, TAPI_SETTINGS_FIELD_DEFAULTS)
 
-def compose_device_config_rules(config_rules : List, subservice_config_rules : List, path_hops : List) -> None:
+def compose_device_config_rules(
+    config_rules : List, subservice_config_rules : List, path_hops : List,
+    device_name_mapping : Dict[str, str], endpoint_name_mapping : Dict[Tuple[str, str], str]
+) -> None:
+
     endpoints_traversed = set()
     for path_hop in path_hops:
         device_uuid_or_name = path_hop['device']
@@ -82,8 +86,16 @@ def compose_device_config_rules(config_rules : List, subservice_config_rules : L
         if config_rule.WhichOneof('config_rule') != 'custom': continue
         match = DEV_EP_SETTINGS.match(config_rule.custom.resource_key)
         if match is None: continue
+
         device_uuid_or_name = match.group(1)
+        device_name_or_uuid = device_name_mapping[device_uuid_or_name]
+        device_keys = {device_uuid_or_name, device_name_or_uuid}
+
         endpoint_uuid_or_name = match.group(2)
-        dev_ep_kep = (device_uuid_or_name, endpoint_uuid_or_name)
-        if dev_ep_kep not in endpoints_traversed: continue
+        endpoint_name_or_uuid_1 = endpoint_name_mapping[(device_uuid_or_name, endpoint_uuid_or_name)]
+        endpoint_name_or_uuid_2 = endpoint_name_mapping[(device_name_or_uuid, endpoint_uuid_or_name)]
+        endpoint_keys = {endpoint_uuid_or_name, endpoint_name_or_uuid_1, endpoint_name_or_uuid_2}
+
+        device_endpoint_keys = set(itertools.product(device_keys, endpoint_keys))
+        if len(device_endpoint_keys.intersection(endpoints_traversed)) == 0: continue
         subservice_config_rules.append(config_rule)
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py b/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py
index ee85f0bb0..e2c6dc138 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ComposeRequest.py
@@ -118,11 +118,11 @@ def compose_link(grpc_link : Link) -> Dict:
         for link_endpoint_id in grpc_link.link_endpoint_ids
     ]
 
-    forwarding_direction = LinkForwardingDirection.BIDIRECTIONAL.value
+    forwarding_direction = LinkForwardingDirection.UNIDIRECTIONAL.value
     total_potential_capacity = compose_capacity(200, CapacityUnit.MBPS.value)
     available_capacity = compose_capacity(200, CapacityUnit.MBPS.value)
     cost_characteristics = compose_cost_characteristics('linkcost', '1', '0')
-    latency_characteristics = compose_latency_characteristics('2')
+    latency_characteristics = compose_latency_characteristics('1')
 
     return {
         'link_Id': link_uuid, 'link_endpoint_ids': endpoint_ids, 'forwarding_direction': forwarding_direction,
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py b/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
index 75701b99e..1f2b4df9c 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
@@ -30,145 +30,41 @@
 # ]
 #
 # connections=[
-#     (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), ServiceTypeEnum.TAPI, [
+#     (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE, [
 #             {'device': 'TN-OLS', 'ingress_ep': '833760219d0f', 'egress_ep': 'cf176771a4b9'}
 #         ], []),
-#     (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), ServiceTypeEnum.L2NM, [
+#     (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), ServiceTypeEnum.SERVICETYPE_L2NM, [
 #             {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
 #             {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
 #             {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
 #             {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'}
 #         ], [UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e')]),
-#     (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), ServiceTypeEnum.L2NM, [
+#     (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), ServiceTypeEnum.SERVICETYPE_L2NM, [
 #             {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
 #             {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
 #         ], [UUID('c2e57966-5d82-4705-a5fe-44cf6487219e')])
 # ]
 
-import enum, json, queue, uuid
+import logging, queue, uuid
 from typing import Dict, List, Optional, Tuple
 from common.DeviceTypes import DeviceTypeEnum
 from common.proto.context_pb2 import Device, ServiceTypeEnum
+from .ResourceGroups import IGNORED_DEVICE_TYPES, get_resource_classification
+from .ServiceTypes import get_service_type
 
-class StackActionEnum(enum.Enum):
-    PATH_INGRESS         = 'ingress'
-    CREATE_CONNECTION    = 'create'
-    APPEND_PATH_HOP      = 'append'
-    CHAIN_CONNECTION     = 'chain'
-    TERMINATE_CONNECTION = 'terminate'
-
-def is_datacenter(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.DATACENTER, DeviceTypeEnum.EMULATED_DATACENTER}
-
-def is_packet_router(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.PACKET_ROUTER, DeviceTypeEnum.EMULATED_PACKET_ROUTER}
-
-def is_packet_switch(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH}
-
-def is_packet_device(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return is_packet_router(dev_type) or is_packet_switch(dev_type)
-
-def is_tfs_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.TERAFLOWSDN_CONTROLLER}
-
-def is_mw_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM, DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM}
-
-def is_ipm_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.XR_CONSTELLATION, DeviceTypeEnum.EMULATED_XR_CONSTELLATION}
-
-def is_ols_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.OPEN_LINE_SYSTEM, DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM}
-
-def is_subdevice(dev_manager : Optional[str]) -> bool:
-    return dev_manager is not None
-
-def is_subdevice_equal(dev_manager_a : Optional[str], dev_manager_b : Optional[str]) -> bool:
-    if dev_manager_a is None and dev_manager_b is None: return True
-    if dev_manager_a is not None and dev_manager_b is not None: return dev_manager_a == dev_manager_b
-    return False
-
-def get_action(
-    prv_type : Optional[DeviceTypeEnum], prv_manager : Optional[str],
-    cur_type : DeviceTypeEnum, cur_manager : Optional[str]
-) -> StackActionEnum:
-    if prv_type is None:
-        return StackActionEnum.PATH_INGRESS
-
-    if is_datacenter(prv_type):
-        if is_packet_device(cur_type): return StackActionEnum.CREATE_CONNECTION
-        if is_tfs_controller(cur_type): return StackActionEnum.CREATE_CONNECTION
-
-    if is_packet_device(prv_type):
-        if is_datacenter(cur_type): return StackActionEnum.TERMINATE_CONNECTION
-        if is_packet_device(cur_type):
-            if is_subdevice_equal(cur_manager, prv_manager): return StackActionEnum.APPEND_PATH_HOP
-            if is_subdevice(prv_manager) and not is_subdevice(cur_manager): return StackActionEnum.TERMINATE_CONNECTION
-            if not is_subdevice(prv_manager) and is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
-
-        if is_mw_controller(cur_type) and not is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
-        if is_ols_controller(cur_type) and not is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
-        if is_tfs_controller(cur_type) and is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
-
-    if is_mw_controller(prv_type) or is_ols_controller(prv_type):
-        if is_packet_device(cur_type): return StackActionEnum.TERMINATE_CONNECTION
-
-    if is_tfs_controller(prv_type):
-        if is_tfs_controller(cur_type) and is_subdevice_equal(prv_manager, cur_manager): return StackActionEnum.APPEND_PATH_HOP
-        if is_datacenter(cur_type): return StackActionEnum.TERMINATE_CONNECTION
-        if is_packet_device(cur_type): return StackActionEnum.TERMINATE_CONNECTION
-        if is_mw_controller(cur_type) or is_ols_controller(cur_type): return StackActionEnum.CHAIN_CONNECTION
-
-    str_fields = ', '.join([
-        'prv_type={:s}'.format(str(prv_type)), 'prv_manager={:s}'.format(str(prv_manager)),
-        'cur_type={:s}'.format(str(cur_type)), 'cur_manager={:s}'.format(str(cur_manager)),
-    ])
-    raise Exception('Undefined Action for ({:s})'.format(str_fields))
-
-def get_device_manager_uuid(device : Device) -> Optional[str]:
-    for config_rule in device.device_config.config_rules:
-        if config_rule.WhichOneof('config_rule') != 'custom': continue
-        if config_rule.custom.resource_key != '_manager': continue
-        device_manager_id = json.loads(config_rule.custom.resource_value)
-        return device_manager_id['uuid']
-    return None
-
-def get_device_type(
-    grpc_device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_manager_uuid : Optional[str]
-) -> DeviceTypeEnum:
-    if device_manager_uuid is None:
-        return DeviceTypeEnum._value2member_map_[grpc_device.device_type] # pylint: disable=no-member
-    device_manager_tuple = device_dict.get(device_manager_uuid)
-    if device_manager_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_manager_uuid)))
-    _,grpc_device = device_manager_tuple
-    return DeviceTypeEnum._value2member_map_[grpc_device.device_type] # pylint: disable=no-member
-
-SERVICE_TYPE_LXNM = {ServiceTypeEnum.SERVICETYPE_L3NM, ServiceTypeEnum.SERVICETYPE_L2NM}
-
-def get_service_type(device_type : DeviceTypeEnum, prv_service_type : ServiceTypeEnum) -> ServiceTypeEnum:
-    if is_tfs_controller(device_type) or is_packet_router(device_type):
-        if prv_service_type in SERVICE_TYPE_LXNM: return prv_service_type
-    if is_packet_switch(device_type) or is_mw_controller(device_type):
-        if prv_service_type == ServiceTypeEnum.SERVICETYPE_L2NM: return prv_service_type
-    if is_ols_controller(device_type) or is_ipm_controller(device_type):
-        return ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE
-
-    str_fields = ', '.join([
-        'device_type={:s}'.format(str(device_type)),
-    ])
-    raise Exception('Undefined Service Type for ({:s})'.format(str_fields))
+LOGGER = logging.getLogger(__name__)
 
 def convert_explicit_path_hops_to_connections(
     path_hops : List[Dict], device_dict : Dict[str, Tuple[Dict, Device]],
     main_service_uuid : str, main_service_type : ServiceTypeEnum
 ) -> List[Tuple[str, int, List[str], List[str]]]:
 
+    LOGGER.debug('path_hops={:s}'.format(str(path_hops)))
+
     connection_stack = queue.LifoQueue()
     connections : List[Tuple[str, int, List[str], List[str]]] = list()
     prv_device_uuid = None
-    prv_device_type = None
-    prv_manager_uuid = None
+    prv_res_class : Tuple[Optional[int], Optional[DeviceTypeEnum], Optional[str]] = None, None, None
 
     for path_hop in path_hops:
         device_uuid = path_hop['device']
@@ -177,29 +73,35 @@ def convert_explicit_path_hops_to_connections(
         if device_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_uuid)))
         _,grpc_device = device_tuple
 
-        manager_uuid = get_device_manager_uuid(grpc_device)
-        device_type = get_device_type(grpc_device, device_dict, manager_uuid)
-        action = get_action(prv_device_type, prv_manager_uuid, device_type, manager_uuid)
+        res_class = get_resource_classification(grpc_device, device_dict)
+        if res_class[1] in IGNORED_DEVICE_TYPES: continue
 
-        if action == StackActionEnum.PATH_INGRESS:
+        if prv_res_class[0] is None:
+            # path ingress
             connection_stack.put((main_service_uuid, main_service_type, [path_hop], []))
-        elif action == StackActionEnum.CREATE_CONNECTION:
-            connection_uuid = str(uuid.uuid4())
-            prv_service_type = connection_stack.queue[-1][1]
-            service_type = get_service_type(device_type, prv_service_type)
-            connection_stack.put((connection_uuid, service_type, [path_hop], []))
-        elif action == StackActionEnum.APPEND_PATH_HOP:
-            connection_stack.queue[-1][2].append(path_hop)
-        elif action == StackActionEnum.CHAIN_CONNECTION:
-            connection = connection_stack.get()
-            connections.append(connection)
-            connection_stack.queue[-1][3].append(connection[0])
-
+        elif prv_res_class[0] > res_class[0]:
+            # create underlying connection
             connection_uuid = str(uuid.uuid4())
             prv_service_type = connection_stack.queue[-1][1]
-            service_type = get_service_type(device_type, prv_service_type)
+            service_type = get_service_type(res_class[1], prv_service_type)
             connection_stack.put((connection_uuid, service_type, [path_hop], []))
-        elif action == StackActionEnum.TERMINATE_CONNECTION:
+        elif prv_res_class[0] == res_class[0]:
+            # same resource group kind
+            if prv_res_class[1] == res_class[1] and prv_res_class[2] == res_class[2]:
+                # same device type and device manager: connection continues
+                connection_stack.queue[-1][2].append(path_hop)
+            else:
+                # different device type or device manager: chain connections
+                connection = connection_stack.get()
+                connections.append(connection)
+                connection_stack.queue[-1][3].append(connection[0])
+
+                connection_uuid = str(uuid.uuid4())
+                prv_service_type = connection_stack.queue[-1][1]
+                service_type = get_service_type(res_class[1], prv_service_type)
+                connection_stack.put((connection_uuid, service_type, [path_hop], []))
+        elif prv_res_class[0] < res_class[0]:
+            # underlying connection ended
             connection = connection_stack.get()
             connections.append(connection)
             connection_stack.queue[-1][3].append(connection[0])
@@ -208,11 +110,11 @@ def convert_explicit_path_hops_to_connections(
             raise Exception('Uncontrolled condition')
 
         prv_device_uuid = device_uuid
-        prv_device_type = device_type
-        prv_manager_uuid = manager_uuid
+        prv_res_class = res_class
 
     # path egress
     connections.append(connection_stack.get())
+    LOGGER.debug('connections={:s}'.format(str(connections)))
     assert connection_stack.empty()
     return connections
 
diff --git a/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py b/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py
index c8a902999..670757d76 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/EroPathToHops.py
@@ -43,13 +43,17 @@
 #
 
 import logging
-from typing import Dict, List
+from typing import Dict, List, Tuple
+from common.proto.context_pb2 import Link
 
 LOGGER = logging.getLogger(__name__)
 
-def eropath_to_hops(ero_path : List[Dict], endpoint_to_link_dict : Dict) -> List[Dict]:
+def eropath_to_hops(
+    ero_path : List[Dict], endpoint_to_link_dict : Dict[Tuple[str, str, str], Tuple[Dict, Link]]
+) -> List[Dict]:
     try:
         path_hops = []
+        num_ero_hops = len(ero_path)
         for endpoint in ero_path:
             device_uuid = endpoint['device_id']
             endpoint_uuid = endpoint['endpoint_uuid']
@@ -59,23 +63,17 @@ def eropath_to_hops(ero_path : List[Dict], endpoint_to_link_dict : Dict) -> List
                 continue
 
             last_hop = path_hops[-1]
-            if (last_hop['device'] == device_uuid):
-                if ('ingress_ep' not in last_hop) or ('egress_ep' in last_hop): continue
-                last_hop['egress_ep'] = endpoint_uuid
-                continue
+            if last_hop['device'] != device_uuid: raise Exception('Malformed path')
+            last_hop['egress_ep'] = endpoint_uuid
+
+            if num_ero_hops - 1 == len(path_hops): break
 
-            endpoint_key = (last_hop['device'], last_hop['egress_ep'])
-            link_tuple = endpoint_to_link_dict.get(endpoint_key)
-            ingress = next(iter([
-                ep_id for ep_id in link_tuple[0]['link_endpoint_ids']
-                if (ep_id['endpoint_id']['device_id'] == device_uuid) and\
-                    (ep_id['endpoint_id']['endpoint_uuid'] != endpoint_uuid)
-            ]), None)
-            if ingress['endpoint_id']['device_id'] != device_uuid: raise Exception('Malformed path')
+            link_tuple = endpoint_to_link_dict[(device_uuid, endpoint_uuid, 'src')]
+            if link_tuple is None: raise Exception('Malformed path')
+            ingress = link_tuple[0]['link_endpoint_ids'][-1]
             path_hops.append({
                 'device': ingress['endpoint_id']['device_id'],
-                'ingress_ep': ingress['endpoint_id']['endpoint_uuid'],
-                'egress_ep': endpoint_uuid,
+                'ingress_ep': ingress['endpoint_id']['endpoint_uuid']
             })
         return path_hops
     except:
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py b/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py
new file mode 100644
index 000000000..0f6ee63dc
--- /dev/null
+++ b/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py
@@ -0,0 +1,94 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import json
+from typing import Dict, Optional, Tuple
+from common.DeviceTypes import DeviceTypeEnum
+from common.proto.context_pb2 import Device
+from common.tools.grpc.Tools import grpc_message_to_json_string
+
+DEVICE_TYPE_TO_DEEPNESS = {
+    DeviceTypeEnum.EMULATED_DATACENTER.value             : 90,
+    DeviceTypeEnum.DATACENTER.value                      : 90,
+    DeviceTypeEnum.NETWORK.value                         : 90,
+
+    DeviceTypeEnum.TERAFLOWSDN_CONTROLLER.value          : 80,
+    DeviceTypeEnum.EMULATED_PACKET_ROUTER.value          : 70,
+    DeviceTypeEnum.PACKET_ROUTER.value                   : 70,
+
+    DeviceTypeEnum.EMULATED_PACKET_SWITCH.value          : 60,
+    DeviceTypeEnum.PACKET_SWITCH.value                   : 60,
+    DeviceTypeEnum.EMULATED_P4_SWITCH.value              : 60,
+    DeviceTypeEnum.P4_SWITCH.value                       : 60,
+
+    DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM.value : 40,
+    DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM.value          : 40,
+
+    DeviceTypeEnum.EMULATED_XR_CONSTELLATION.value       : 40,
+    DeviceTypeEnum.XR_CONSTELLATION.value                : 40,
+
+    DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value       : 30,
+    DeviceTypeEnum.OPEN_LINE_SYSTEM.value                : 30,
+
+    DeviceTypeEnum.EMULATED_PACKET_RADIO_ROUTER.value    : 10,
+    DeviceTypeEnum.PACKET_RADIO_ROUTER.value             : 10,
+    DeviceTypeEnum.EMULATED_OPTICAL_TRANSPONDER.value    : 10,
+    DeviceTypeEnum.OPTICAL_TRANSPONDER.value             : 10,
+    DeviceTypeEnum.EMULATED_OPTICAL_ROADM.value          : 10,
+    DeviceTypeEnum.OPTICAL_ROADM.value                   : 10,
+
+    DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER.value       :  0,
+}
+
+IGNORED_DEVICE_TYPES = {DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER}
+
+def get_device_manager_uuid(
+    device : Device
+) -> Optional[str]:
+    for config_rule in device.device_config.config_rules:
+        if config_rule.WhichOneof('config_rule') != 'custom': continue
+        if config_rule.custom.resource_key != '_manager': continue
+        device_manager_id = json.loads(config_rule.custom.resource_value)
+        return device_manager_id['uuid']
+    return None
+
+def _map_device_type(device : Device) -> DeviceTypeEnum:
+    device_type = DeviceTypeEnum._value2member_map_.get(device.device_type) # pylint: disable=no-member
+    if device_type is None:
+        MSG = 'Unsupported DeviceType({:s}) for Device({:s})'
+        raise Exception(MSG.format(str(device.device_type), grpc_message_to_json_string(device)))
+    return device_type
+
+def _map_resource_to_deepness(device_type : DeviceTypeEnum) -> int:
+    deepness = DEVICE_TYPE_TO_DEEPNESS.get(device_type.value)
+    if deepness is None: raise Exception('Unsupported DeviceType({:s})'.format(str(device_type.value)))
+    return deepness
+
+def get_device_type(
+    device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_manager_uuid : Optional[str]
+) -> DeviceTypeEnum:
+    if device_manager_uuid is None: return _map_device_type(device)
+    device_manager_tuple = device_dict.get(device_manager_uuid)
+    if device_manager_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_manager_uuid)))
+    _,device = device_manager_tuple
+    return _map_device_type(device)
+
+def get_resource_classification(
+    device : Device, device_dict : Dict[str, Tuple[Dict, Device]]
+) -> Tuple[int, DeviceTypeEnum, Optional[str]]:
+    device_manager_uuid = get_device_manager_uuid(device)
+    device_type = get_device_type(device, device_dict, device_manager_uuid)
+    resource_deepness = _map_resource_to_deepness(device_type)
+    return resource_deepness, device_type, device_manager_uuid
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ServiceTypes.py b/src/pathcomp/frontend/service/algorithms/tools/ServiceTypes.py
new file mode 100644
index 000000000..463b8039b
--- /dev/null
+++ b/src/pathcomp/frontend/service/algorithms/tools/ServiceTypes.py
@@ -0,0 +1,53 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 common.DeviceTypes import DeviceTypeEnum
+from common.proto.context_pb2 import ServiceTypeEnum
+
+PACKET_DEVICE_TYPES = {
+    DeviceTypeEnum.TERAFLOWSDN_CONTROLLER,
+    DeviceTypeEnum.PACKET_ROUTER, DeviceTypeEnum.EMULATED_PACKET_ROUTER,
+    DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH,
+}
+
+L2_DEVICE_TYPES = {
+    DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH,
+    DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM, DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM,
+    DeviceTypeEnum.PACKET_RADIO_ROUTER, DeviceTypeEnum.EMULATED_PACKET_RADIO_ROUTER,
+    DeviceTypeEnum.P4_SWITCH, DeviceTypeEnum.EMULATED_P4_SWITCH,
+}
+
+OPTICAL_DEVICE_TYPES = {
+    DeviceTypeEnum.OPEN_LINE_SYSTEM, DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM,
+    DeviceTypeEnum.XR_CONSTELLATION, DeviceTypeEnum.EMULATED_XR_CONSTELLATION,
+    DeviceTypeEnum.OPTICAL_ROADM, DeviceTypeEnum.EMULATED_OPTICAL_ROADM,
+    DeviceTypeEnum.OPTICAL_TRANSPONDER, DeviceTypeEnum.EMULATED_OPTICAL_TRANSPONDER,
+}
+
+SERVICE_TYPE_L2NM = {ServiceTypeEnum.SERVICETYPE_L2NM}
+SERVICE_TYPE_L3NM = {ServiceTypeEnum.SERVICETYPE_L3NM}
+SERVICE_TYPE_LXNM = {ServiceTypeEnum.SERVICETYPE_L3NM, ServiceTypeEnum.SERVICETYPE_L2NM}
+SERVICE_TYPE_TAPI = {ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE}
+
+def get_service_type(device_type : DeviceTypeEnum, prv_service_type : ServiceTypeEnum) -> ServiceTypeEnum:
+    if device_type in PACKET_DEVICE_TYPES and prv_service_type in SERVICE_TYPE_LXNM: return prv_service_type
+    if device_type in L2_DEVICE_TYPES: return ServiceTypeEnum.SERVICETYPE_L2NM
+    if device_type in OPTICAL_DEVICE_TYPES: return ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE
+
+    str_fields = ', '.join([
+        'device_type={:s}'.format(str(device_type)),
+        'prv_service_type={:s}'.format(str(prv_service_type)),
+    ])
+    raise Exception('Undefined Service Type for ({:s})'.format(str_fields))
diff --git a/test_pathcomp/ComputeSubServices.py b/test_pathcomp/ComputeSubServices.py
index e0b229625..1f2b4df9c 100644
--- a/test_pathcomp/ComputeSubServices.py
+++ b/test_pathcomp/ComputeSubServices.py
@@ -30,167 +30,41 @@
 # ]
 #
 # connections=[
-#     (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), <DeviceLayerEnum.OPTICAL_CONTROLLER: 1>, [
+#     (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE, [
 #             {'device': 'TN-OLS', 'ingress_ep': '833760219d0f', 'egress_ep': 'cf176771a4b9'}
 #         ], []),
-#     (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), <DeviceLayerEnum.PACKET_DEVICE: 30>, [
+#     (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), ServiceTypeEnum.SERVICETYPE_L2NM, [
 #             {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
 #             {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
 #             {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
 #             {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'}
 #         ], [UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e')]),
-#     (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), <DeviceLayerEnum.APPLICATION_DEVICE: 40>, [
+#     (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), ServiceTypeEnum.SERVICETYPE_L2NM, [
 #             {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
 #             {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
 #         ], [UUID('c2e57966-5d82-4705-a5fe-44cf6487219e')])
 # ]
 
-import enum, json, queue, uuid
+import logging, queue, uuid
 from typing import Dict, List, Optional, Tuple
 from common.DeviceTypes import DeviceTypeEnum
-from common.proto.context_pb2 import Device, ServiceTypeEnum #, DeviceDriverEnum as grpc_DeviceDriverEnum
-#from .ConstantsMappings import DEVICE_TYPE_TO_LAYER, DeviceLayerEnum
-
-class StackActionEnum(enum.Enum):
-    PATH_INGRESS         = 'ingress'
-    CREATE_CONNECTION    = 'create'
-    APPEND_PATH_HOP      = 'append'
-    CHAIN_CONNECTION     = 'chain'
-    TERMINATE_CONNECTION = 'terminate'
-
-#class DeviceDriverEnum(enum.IntEnum):
-#    EMULATED              = grpc_DeviceDriverEnum.DEVICEDRIVER_UNDEFINED
-#    OPENCONFIG            = grpc_DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG
-#    TRANSPORT_API         = grpc_DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API
-#    P4                    = grpc_DeviceDriverEnum.DEVICEDRIVER_P4
-#    IETF_NETWORK_TOPOLOGY = grpc_DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY
-#    ONF_TR_352            = grpc_DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352
-#    XR                    = grpc_DeviceDriverEnum.DEVICEDRIVER_XR
-#    IETF_L2VPN            = grpc_DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN
-
-def is_datacenter(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.DATACENTER, DeviceTypeEnum.EMULATED_DATACENTER}
-
-def is_packet_router(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.PACKET_ROUTER, DeviceTypeEnum.EMULATED_PACKET_ROUTER}
-
-def is_packet_switch(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH}
-
-def is_packet_device(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return is_packet_router(dev_type) or is_packet_switch(dev_type)
-
-def is_tfs_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.TERAFLOWSDN_CONTROLLER}
-
-def is_mw_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM, DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM}
-
-def is_ipm_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.XR_CONSTELLATION, DeviceTypeEnum.EMULATED_XR_CONSTELLATION}
-
-def is_ols_controller(dev_type : Optional[DeviceTypeEnum]) -> bool:
-    return dev_type in {DeviceTypeEnum.OPEN_LINE_SYSTEM, DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM}
-
-def is_subdevice(dev_manager : Optional[str]) -> bool:
-    return dev_manager is not None
-
-def is_subdevice_equal(dev_manager_a : Optional[str], dev_manager_b : Optional[str]) -> bool:
-    if dev_manager_a is None and dev_manager_b is None: return True
-    if dev_manager_a is not None and dev_manager_b is not None: return dev_manager_a == dev_manager_b
-    return False
-
-#def has_driver(dev_drivers : List[DeviceDriverEnum], dev_driver : DeviceDriverEnum) -> bool:
-#    return dev_driver in dev_drivers
-
-def get_action(
-    prv_type : Optional[DeviceTypeEnum], prv_manager : Optional[str],
-    cur_type : DeviceTypeEnum, cur_manager : Optional[str]
-) -> StackActionEnum:
-    if prv_type is None:
-        return StackActionEnum.PATH_INGRESS
-
-    if is_datacenter(prv_type):
-        if is_packet_device(cur_type): return StackActionEnum.CREATE_CONNECTION
-        if is_tfs_controller(cur_type): return StackActionEnum.CREATE_CONNECTION
-
-    if is_packet_device(prv_type):
-        if is_datacenter(cur_type): return StackActionEnum.TERMINATE_CONNECTION
-        if is_packet_device(cur_type):
-            if is_subdevice_equal(cur_manager, prv_manager): return StackActionEnum.APPEND_PATH_HOP
-            if is_subdevice(prv_manager) and not is_subdevice(cur_manager): return StackActionEnum.TERMINATE_CONNECTION
-            if not is_subdevice(prv_manager) and is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
-
-        if is_mw_controller(cur_type) and not is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
-        if is_ols_controller(cur_type) and not is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
-        if is_tfs_controller(cur_type) and is_subdevice(cur_manager): return StackActionEnum.CREATE_CONNECTION
-
-    if is_mw_controller(prv_type) or is_ols_controller(prv_type):
-        if is_packet_device(cur_type): return StackActionEnum.TERMINATE_CONNECTION
-
-    if is_tfs_controller(prv_type):
-        if is_tfs_controller(cur_type) and is_subdevice_equal(prv_manager, cur_manager): return StackActionEnum.APPEND_PATH_HOP
-        if is_datacenter(cur_type): return StackActionEnum.TERMINATE_CONNECTION
-        if is_packet_device(cur_type): return StackActionEnum.TERMINATE_CONNECTION
-        if is_mw_controller(cur_type) or is_ols_controller(cur_type): return StackActionEnum.CHAIN_CONNECTION
-
-    str_fields = ', '.join([
-        'prv_type={:s}'.format(str(prv_type)), 'prv_manager={:s}'.format(str(prv_manager)),
-        'cur_type={:s}'.format(str(cur_type)), 'cur_manager={:s}'.format(str(cur_manager)),
-    ])
-    raise Exception('Undefined Action for ({:s})'.format(str_fields))
-
-def get_device_manager_uuid(device : Device) -> Optional[str]:
-    for config_rule in device.device_config.config_rules:
-        if config_rule.WhichOneof('config_rule') != 'custom': continue
-        if config_rule.custom.resource_key != '_manager': continue
-        device_manager_id = json.loads(config_rule.custom.resource_value)
-        return device_manager_id['uuid']
-    return None
-
-def get_device_type(
-    grpc_device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_manager_uuid : Optional[str]
-) -> DeviceTypeEnum:
-    if device_manager_uuid is None:
-        return DeviceTypeEnum._value2member_map_[grpc_device.device_type] # pylint: disable=no-member
-    device_manager_tuple = device_dict.get(device_manager_uuid)
-    if device_manager_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_manager_uuid)))
-    _,grpc_device = device_manager_tuple
-    return DeviceTypeEnum._value2member_map_[grpc_device.device_type] # pylint: disable=no-member
-
-    #manager_drivers = set(grpc_device.device_drivers)
-    #if DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN in manager_drivers:
-    #    device_layer = DeviceLayerEnum.MAC_LAYER_CONTROLLER
-    #else:
-    #    device_type = json_device['device_type']
-    #    device_layer = DEVICE_TYPE_TO_LAYER.get(device_type)
-    #    if device_layer is None: raise Exception('Undefined Layer for DeviceType({:s})'.format(str(device_type)))
-
-SERVICE_TYPE_LXNM = {ServiceTypeEnum.SERVICETYPE_L3NM, ServiceTypeEnum.SERVICETYPE_L2NM}
-
-def get_service_type(device_type : DeviceTypeEnum, prv_service_type : ServiceTypeEnum) -> ServiceTypeEnum:
-    if is_tfs_controller(device_type) or is_packet_router(device_type):
-        if prv_service_type in SERVICE_TYPE_LXNM: return prv_service_type
-    if is_packet_switch(device_type) or is_mw_controller(device_type):
-        if prv_service_type == ServiceTypeEnum.SERVICETYPE_L2NM: return prv_service_type
-    if is_ols_controller(device_type) or is_ipm_controller(device_type):
-        return ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE
-
-    str_fields = ', '.join([
-        'device_type={:s}'.format(str(device_type)),
-    ])
-    raise Exception('Undefined Service Type for ({:s})'.format(str_fields))
+from common.proto.context_pb2 import Device, ServiceTypeEnum
+from .ResourceGroups import IGNORED_DEVICE_TYPES, get_resource_classification
+from .ServiceTypes import get_service_type
+
+LOGGER = logging.getLogger(__name__)
 
 def convert_explicit_path_hops_to_connections(
     path_hops : List[Dict], device_dict : Dict[str, Tuple[Dict, Device]],
     main_service_uuid : str, main_service_type : ServiceTypeEnum
 ) -> List[Tuple[str, int, List[str], List[str]]]:
 
+    LOGGER.debug('path_hops={:s}'.format(str(path_hops)))
+
     connection_stack = queue.LifoQueue()
     connections : List[Tuple[str, int, List[str], List[str]]] = list()
     prv_device_uuid = None
-    prv_device_type = None
-    prv_manager_uuid = None
+    prv_res_class : Tuple[Optional[int], Optional[DeviceTypeEnum], Optional[str]] = None, None, None
 
     for path_hop in path_hops:
         device_uuid = path_hop['device']
@@ -199,29 +73,35 @@ def convert_explicit_path_hops_to_connections(
         if device_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_uuid)))
         _,grpc_device = device_tuple
 
-        manager_uuid = get_device_manager_uuid(grpc_device)
-        device_type = get_device_type(grpc_device, device_dict, manager_uuid)
-        action = get_action(prv_device_type, prv_manager_uuid, device_type, manager_uuid)
+        res_class = get_resource_classification(grpc_device, device_dict)
+        if res_class[1] in IGNORED_DEVICE_TYPES: continue
 
-        if action == StackActionEnum.PATH_INGRESS:
+        if prv_res_class[0] is None:
+            # path ingress
             connection_stack.put((main_service_uuid, main_service_type, [path_hop], []))
-        elif action == StackActionEnum.CREATE_CONNECTION:
-            connection_uuid = str(uuid.uuid4())
-            prv_service_type = connection_stack.queue[-1][1]
-            service_type = get_service_type(device_type, prv_service_type)
-            connection_stack.put((connection_uuid, service_type, [path_hop], []))
-        elif action == StackActionEnum.APPEND_PATH_HOP:
-            connection_stack.queue[-1][2].append(path_hop)
-        elif action == StackActionEnum.CHAIN_CONNECTION:
-            connection = connection_stack.get()
-            connections.append(connection)
-            connection_stack.queue[-1][3].append(connection[0])
-
+        elif prv_res_class[0] > res_class[0]:
+            # create underlying connection
             connection_uuid = str(uuid.uuid4())
             prv_service_type = connection_stack.queue[-1][1]
-            service_type = get_service_type(device_type, prv_service_type)
+            service_type = get_service_type(res_class[1], prv_service_type)
             connection_stack.put((connection_uuid, service_type, [path_hop], []))
-        elif action == StackActionEnum.TERMINATE_CONNECTION:
+        elif prv_res_class[0] == res_class[0]:
+            # same resource group kind
+            if prv_res_class[1] == res_class[1] and prv_res_class[2] == res_class[2]:
+                # same device type and device manager: connection continues
+                connection_stack.queue[-1][2].append(path_hop)
+            else:
+                # different device type or device manager: chain connections
+                connection = connection_stack.get()
+                connections.append(connection)
+                connection_stack.queue[-1][3].append(connection[0])
+
+                connection_uuid = str(uuid.uuid4())
+                prv_service_type = connection_stack.queue[-1][1]
+                service_type = get_service_type(res_class[1], prv_service_type)
+                connection_stack.put((connection_uuid, service_type, [path_hop], []))
+        elif prv_res_class[0] < res_class[0]:
+            # underlying connection ended
             connection = connection_stack.get()
             connections.append(connection)
             connection_stack.queue[-1][3].append(connection[0])
@@ -230,11 +110,11 @@ def convert_explicit_path_hops_to_connections(
             raise Exception('Uncontrolled condition')
 
         prv_device_uuid = device_uuid
-        prv_device_type = device_type
-        prv_manager_uuid = manager_uuid
+        prv_res_class = res_class
 
     # path egress
     connections.append(connection_stack.get())
+    LOGGER.debug('connections={:s}'.format(str(connections)))
     assert connection_stack.empty()
     return connections
 
diff --git a/test_pathcomp/ResourceGroups.py b/test_pathcomp/ResourceGroups.py
new file mode 100644
index 000000000..7b3888144
--- /dev/null
+++ b/test_pathcomp/ResourceGroups.py
@@ -0,0 +1,93 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json
+from typing import Dict, Optional, Tuple
+from common.DeviceTypes import DeviceTypeEnum
+from common.proto.context_pb2 import Device
+from common.tools.grpc.Tools import grpc_message_to_json_string
+
+DEVICE_TYPE_TO_DEEPNESS = {
+    DeviceTypeEnum.EMULATED_DATACENTER.value             : 90,
+    DeviceTypeEnum.DATACENTER.value                      : 90,
+    DeviceTypeEnum.NETWORK.value                         : 90,
+
+    DeviceTypeEnum.TERAFLOWSDN_CONTROLLER.value          : 80,
+    DeviceTypeEnum.EMULATED_PACKET_ROUTER.value          : 70,
+    DeviceTypeEnum.PACKET_ROUTER.value                   : 70,
+
+    DeviceTypeEnum.EMULATED_PACKET_SWITCH.value          : 60,
+    DeviceTypeEnum.PACKET_SWITCH.value                   : 60,
+    DeviceTypeEnum.EMULATED_P4_SWITCH.value              : 60,
+    DeviceTypeEnum.P4_SWITCH.value                       : 60,
+
+    DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM.value : 40,
+    DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM.value          : 40,
+
+    DeviceTypeEnum.EMULATED_XR_CONSTELLATION.value       : 40,
+    DeviceTypeEnum.XR_CONSTELLATION.value                : 40,
+
+    DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value       : 30,
+    DeviceTypeEnum.OPEN_LINE_SYSTEM.value                : 30,
+
+    DeviceTypeEnum.EMULATED_PACKET_RADIO_ROUTER.value    : 10,
+    DeviceTypeEnum.PACKET_RADIO_ROUTER.value             : 10,
+    DeviceTypeEnum.EMULATED_OPTICAL_TRANSPONDER.value    : 10,
+    DeviceTypeEnum.OPTICAL_TRANSPONDER.value             : 10,
+    DeviceTypeEnum.EMULATED_OPTICAL_ROADM.value          : 10,
+    DeviceTypeEnum.OPTICAL_ROADM.value                   : 10,
+
+    DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER.value       :  0,
+}
+
+IGNORED_DEVICE_TYPES = {DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER}
+
+def get_device_manager_uuid(
+    device : Device
+) -> Optional[str]:
+    for config_rule in device.device_config.config_rules:
+        if config_rule.WhichOneof('config_rule') != 'custom': continue
+        if config_rule.custom.resource_key != '_manager': continue
+        device_manager_id = json.loads(config_rule.custom.resource_value)
+        return device_manager_id['uuid']
+    return None
+
+def _map_device_type(device : Device) -> DeviceTypeEnum:
+    device_type = DeviceTypeEnum._value2member_map_.get(device.device_type) # pylint: disable=no-member
+    if device_type is None:
+        MSG = 'Unsupported DeviceType({:s}) for Device({:s})'
+        raise Exception(MSG.format(str(device.device_type), grpc_message_to_json_string(device)))
+    return device_type
+
+def _map_resource_to_deepness(device_type : DeviceTypeEnum) -> int:
+    deepness = DEVICE_TYPE_TO_DEEPNESS.get(device_type.value)
+    if deepness is None: raise Exception('Unsupported DeviceType({:s})'.format(str(device_type.value)))
+    return deepness
+
+def get_device_type(
+    device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_manager_uuid : Optional[str]
+) -> DeviceTypeEnum:
+    if device_manager_uuid is None: return _map_device_type(device)
+    device_manager_tuple = device_dict.get(device_manager_uuid)
+    if device_manager_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_manager_uuid)))
+    _,device = device_manager_tuple
+    return _map_device_type(device)
+
+def get_resource_classification(
+    device : Device, device_dict : Dict[str, Tuple[Dict, Device]]
+) -> Tuple[int, DeviceTypeEnum, Optional[str]]:
+    device_manager_uuid = get_device_manager_uuid(device)
+    device_type = get_device_type(device, device_dict, device_manager_uuid)
+    resource_deepness = _map_resource_to_deepness(device_type)
+    return resource_deepness, device_type, device_manager_uuid
diff --git a/test_pathcomp/ServiceTypes.py b/test_pathcomp/ServiceTypes.py
new file mode 100644
index 000000000..463b8039b
--- /dev/null
+++ b/test_pathcomp/ServiceTypes.py
@@ -0,0 +1,53 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 common.DeviceTypes import DeviceTypeEnum
+from common.proto.context_pb2 import ServiceTypeEnum
+
+PACKET_DEVICE_TYPES = {
+    DeviceTypeEnum.TERAFLOWSDN_CONTROLLER,
+    DeviceTypeEnum.PACKET_ROUTER, DeviceTypeEnum.EMULATED_PACKET_ROUTER,
+    DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH,
+}
+
+L2_DEVICE_TYPES = {
+    DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH,
+    DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM, DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM,
+    DeviceTypeEnum.PACKET_RADIO_ROUTER, DeviceTypeEnum.EMULATED_PACKET_RADIO_ROUTER,
+    DeviceTypeEnum.P4_SWITCH, DeviceTypeEnum.EMULATED_P4_SWITCH,
+}
+
+OPTICAL_DEVICE_TYPES = {
+    DeviceTypeEnum.OPEN_LINE_SYSTEM, DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM,
+    DeviceTypeEnum.XR_CONSTELLATION, DeviceTypeEnum.EMULATED_XR_CONSTELLATION,
+    DeviceTypeEnum.OPTICAL_ROADM, DeviceTypeEnum.EMULATED_OPTICAL_ROADM,
+    DeviceTypeEnum.OPTICAL_TRANSPONDER, DeviceTypeEnum.EMULATED_OPTICAL_TRANSPONDER,
+}
+
+SERVICE_TYPE_L2NM = {ServiceTypeEnum.SERVICETYPE_L2NM}
+SERVICE_TYPE_L3NM = {ServiceTypeEnum.SERVICETYPE_L3NM}
+SERVICE_TYPE_LXNM = {ServiceTypeEnum.SERVICETYPE_L3NM, ServiceTypeEnum.SERVICETYPE_L2NM}
+SERVICE_TYPE_TAPI = {ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE}
+
+def get_service_type(device_type : DeviceTypeEnum, prv_service_type : ServiceTypeEnum) -> ServiceTypeEnum:
+    if device_type in PACKET_DEVICE_TYPES and prv_service_type in SERVICE_TYPE_LXNM: return prv_service_type
+    if device_type in L2_DEVICE_TYPES: return ServiceTypeEnum.SERVICETYPE_L2NM
+    if device_type in OPTICAL_DEVICE_TYPES: return ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE
+
+    str_fields = ', '.join([
+        'device_type={:s}'.format(str(device_type)),
+        'prv_service_type={:s}'.format(str(prv_service_type)),
+    ])
+    raise Exception('Undefined Service Type for ({:s})'.format(str_fields))
diff --git a/test_pathcomp/data.py b/test_pathcomp/data.py
index 5e94d969e..399c5ff60 100644
--- a/test_pathcomp/data.py
+++ b/test_pathcomp/data.py
@@ -15,101 +15,56 @@
 
 import json
 from typing import Dict, Tuple
+from common.DeviceTypes import DeviceTypeEnum
 from common.proto.context_pb2 import ConfigActionEnum, Device
 
 path_hops = [
-    {'device': 'DC1', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
-    {'device': 'PE1', 'ingress_ep': '1/1', 'egress_ep': '1/2'},
-    {'device': 'MW1-2', 'ingress_ep': '172.18.0.1:1', 'egress_ep': '172.18.0.2:1'},
-    {'device': 'R1', 'ingress_ep': '1/1', 'egress_ep': '1/3'},
-    {'device': 'OLS', 'ingress_ep': 'aade6001-f00b-5e2f-a357-6a0a9d3de870', 'egress_ep': '0ef74f99-1acc-57bd-ab9d-4b958b06c513'},
-    {'device': 'R2', 'ingress_ep': '1/1', 'egress_ep': '1/2'},
-    {'device': 'PE3', 'ingress_ep': '1/1', 'egress_ep': '1/2'},
-    {'device': 'DC2', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
+    {'device': 'DC1',      'ingress_ep': 'int',                  'egress_ep': 'eth1'                 },
+    {'device': 'PE1',      'ingress_ep': '1/1',                  'egress_ep': '1/2'                  },
+    {'device': 'MW1-2',    'ingress_ep': '172.18.0.1:1',         'egress_ep': '172.18.0.2:1'         },
+    {'device': 'HUB1',     'ingress_ep': '1/1',                  'egress_ep': 'XR-T1'                },
+    {'device': 'splitter', 'ingress_ep': 'common',               'egress_ep': 'leaf1'                },
+    {'device': 'OLS',      'ingress_ep': 'node_1_port_13-input', 'egress_ep': 'node_4_port_13-output'},
+    {'device': 'LEAF2',    'ingress_ep': 'XR-T1',                'egress_ep': '1/1'                  },
+    {'device': 'PE4',      'ingress_ep': '1/1',                  'egress_ep': '1/2'                  },
+    {'device': 'DC2',      'ingress_ep': 'eth2',                 'egress_ep': 'int'                  }
 ]
 
-device_dict = {
-    'R3': {'device_Id': 'R3', 'device_type': 'emu-packet-router', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'R3', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'R3', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'}
-    ]},
-    'PE4': {'device_Id': 'PE4', 'device_type': 'emu-packet-router', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'PE4', 'endpoint_uuid': 'mgmt'}, 'endpoint_type': 'mgmt'},
-        {'endpoint_id': {'device_id': 'PE4', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'PE4', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'}
-    ]},
-    'PE2': {'device_Id': 'PE2', 'device_type': 'emu-packet-router', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'PE2', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'PE2', 'endpoint_uuid': 'mgmt'}, 'endpoint_type': 'mgmt'},
-        {'endpoint_id': {'device_id': 'PE2', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'}
-    ]},
-    'R1': {'device_Id': 'R1', 'device_type': 'emu-packet-router', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'R1', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'R1', 'endpoint_uuid': '1/3'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'R1', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'}
-    ]},
-    'PE3': {'device_Id': 'PE3', 'device_type': 'emu-packet-router', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'PE3', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'PE3', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'PE3', 'endpoint_uuid': 'mgmt'}, 'endpoint_type': 'mgmt'}
-    ]},
-    'OLS': {'device_Id': 'OLS', 'device_type': 'emu-open-line-system', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'OLS', 'endpoint_uuid': '0ef74f99-1acc-57bd-ab9d-4b958b06c513'}, 'endpoint_type': 'optical'},
-        {'endpoint_id': {'device_id': 'OLS', 'endpoint_uuid': '50296d99-58cc-5ce7-82f5-fc8ee4eec2ec'}, 'endpoint_type': 'optical'},
-        {'endpoint_id': {'device_id': 'OLS', 'endpoint_uuid': 'aade6001-f00b-5e2f-a357-6a0a9d3de870'}, 'endpoint_type': 'optical'},
-        {'endpoint_id': {'device_id': 'OLS', 'endpoint_uuid': 'eb287d83-f05e-53ec-ab5a-adf6bd2b5418'}, 'endpoint_type': 'optical'}
-    ]},
-    'PE1': {'device_Id': 'PE1', 'device_type': 'emu-packet-router', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'PE1', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'PE1', 'endpoint_uuid': 'mgmt'}, 'endpoint_type': 'mgmt'},
-        {'endpoint_id': {'device_id': 'PE1', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'}
-    ]},
-    'DC2': {'device_Id': 'DC2', 'device_type': 'emu-datacenter', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'DC2', 'endpoint_uuid': 'eth1'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'DC2', 'endpoint_uuid': 'eth2'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'DC2', 'endpoint_uuid': 'int'}, 'endpoint_type': 'copper/internal'}
-    ]},
-    'MW1-2': {'device_Id': 'MW1-2', 'device_type': 'emu-microwave-radio-system', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'MW1-2', 'endpoint_uuid': '172.18.0.1:1'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'MW1-2', 'endpoint_uuid': '172.18.0.2:1'}, 'endpoint_type': 'copper/internal'}
-    ]},
-    'MW3-4': {'device_Id': 'MW3-4', 'device_type': 'emu-microwave-radio-system', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'MW3-4', 'endpoint_uuid': '172.18.0.3:1'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'MW3-4', 'endpoint_uuid': '172.18.0.4:1'}, 'endpoint_type': 'copper/internal'}
-    ]},
-    'TFS': {'device_Id': 'TFS', 'device_type': 'teraflowsdn', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'TFS', 'endpoint_uuid': 'mgmt'}, 'endpoint_type': 'mgmt'}
-    ]},
-    'R2': {'device_Id': 'R2', 'device_type': 'emu-packet-router', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'R2', 'endpoint_uuid': '1/2'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'R2', 'endpoint_uuid': '1/1'}, 'endpoint_type': 'copper/internal'}
-    ]},
-    'DC1': {'device_Id': 'DC1', 'device_type': 'emu-datacenter', 'device_endpoints': [
-        {'endpoint_id': {'device_id': 'DC1', 'endpoint_uuid': 'int'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'DC1', 'endpoint_uuid': 'eth1'}, 'endpoint_type': 'copper/internal'},
-        {'endpoint_id': {'device_id': 'DC1', 'endpoint_uuid': 'eth2'}, 'endpoint_type': 'copper/internal'}
-    ]},
-}
+device_data = {
+    'TFS'     : {'manager_uuid': None,  'device_type': DeviceTypeEnum.TERAFLOWSDN_CONTROLLER   },
+    'IPM'     : {'manager_uuid': None,  'device_type': DeviceTypeEnum.XR_CONSTELLATION         },
+    'OLS'     : {'manager_uuid': None,  'device_type': DeviceTypeEnum.OPEN_LINE_SYSTEM         },
+    'MW1-2'   : {'manager_uuid': None,  'device_type': DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM   },
+    'MW3-4'   : {'manager_uuid': None,  'device_type': DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM   },
 
-MANAGED_DEVICES = {'PE1', 'PE2', 'PE3', 'PE4'}
-MANAGER = 'TFS'
+    'DC1'     : {'manager_uuid': None,  'device_type': DeviceTypeEnum.EMULATED_DATACENTER      },
+    'DC2'     : {'manager_uuid': None,  'device_type': DeviceTypeEnum.EMULATED_DATACENTER      },
 
-def process_device(json_device) -> Tuple[Dict, Device]:
-    device_uuid = json_device['device_Id']
+    'PE1'     : {'manager_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'PE2'     : {'manager_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'PE3'     : {'manager_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'PE4'     : {'manager_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
 
-    grpc_device = Device()
-    grpc_device.device_id.device_uuid.uuid = device_uuid
-    grpc_device.device_type = json_device['device_type']
+    'HUB1'    : {'manager_uuid': 'IPM', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'LEAF1'   : {'manager_uuid': 'IPM', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'LEAF2'   : {'manager_uuid': 'IPM', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
 
-    if device_uuid in MANAGED_DEVICES:
-        config_rule = grpc_device.device_config.config_rules.add()
+    'splitter': {'manager_uuid': None,  'device_type': DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER},
+}
+
+def process_device(device_uuid, json_device) -> Tuple[Dict, Device]:
+    grpc_device = Device()
+    grpc_device.device_id.device_uuid.uuid = device_uuid            # pylint: disable=no-member
+    grpc_device.device_type = json_device['device_type'].value
+    manager_uuid = json_device.get('manager_uuid')
+    if manager_uuid is not None:
+        config_rule = grpc_device.device_config.config_rules.add()  # pylint: disable=no-member
         config_rule.action = ConfigActionEnum.CONFIGACTION_SET
         config_rule.custom.resource_key = '_manager'
-        config_rule.custom.resource_value = json.dumps({'uuid': MANAGER})
-
+        config_rule.custom.resource_value = json.dumps({'uuid': manager_uuid})
     return json_device, grpc_device
 
 device_dict = {
-    device_uuid:process_device(json_device)
-    for device_uuid,json_device in device_dict.items()
+    device_uuid:process_device(device_uuid, json_device)
+    for device_uuid,json_device in device_data.items()
 }
diff --git a/test_pathcomp/old_ComputeSubServices.py b/test_pathcomp/old_ComputeSubServices.py
new file mode 100644
index 000000000..c1d3115d4
--- /dev/null
+++ b/test_pathcomp/old_ComputeSubServices.py
@@ -0,0 +1,119 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# Convert the path defined as explicit hops with ingress and egress endpoints per device into a set of connections and
+# compute the dependencies among them.
+#
+# Example:
+# o-- int DC1 eth1 -- 10/1 CS1 1/2 -- 1/2 R2 2/1 -- a7.. OLS 60.. -- 2/1 R3 1/1 -- 1/1 CS2 10/1 -- eth1 DC2 int --o
+#         APP              PKT            PKT            CTRL            PKT           PKT              APP
+#
+# path_hops = [
+#     {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
+#     {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
+#     {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
+#     {'device': 'TN-OLS', 'ingress_ep': 'a7a80b23a703', 'egress_ep': '60519106029e'},
+#     {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
+#     {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'},
+#     {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
+# ]
+#
+# connections=[
+#     (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE, [
+#             {'device': 'TN-OLS', 'ingress_ep': '833760219d0f', 'egress_ep': 'cf176771a4b9'}
+#         ], []),
+#     (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), ServiceTypeEnum.SERVICETYPE_L2NM, [
+#             {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
+#             {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
+#             {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
+#             {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'}
+#         ], [UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e')]),
+#     (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), ServiceTypeEnum.SERVICETYPE_L2NM, [
+#             {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
+#             {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
+#         ], [UUID('c2e57966-5d82-4705-a5fe-44cf6487219e')])
+# ]
+
+import enum, json, logging, queue, uuid
+from typing import Dict, List, Optional, Tuple
+from common.DeviceTypes import DeviceTypeEnum
+from common.proto.context_pb2 import Device, ServiceTypeEnum
+from test_pathcomp.ResourceGroups import ResourceGroupKindEnum
+
+
+
+from .ConstantsMappings import DEVICE_TYPE_TO_LAYER, DeviceLayerEnum
+
+def convert_explicit_path_hops_to_connections(
+    path_hops : List[Dict], device_dict : Dict[str, Tuple[Dict, Device]],
+    main_service_uuid : str, main_service_type : ServiceTypeEnum
+) -> List[Tuple[str, int, List[str], List[str]]]:
+
+    connection_stack = queue.LifoQueue()
+    connections : List[Tuple[str, int, List[str], List[str]]] = list()
+    prv_device_uuid = None
+    prv_resource_group : Optional[Tuple[ResourceGroupKindEnum, DeviceTypeEnum, str]] = None
+
+    for path_hop in path_hops:
+        device_uuid = path_hop['device']
+        if prv_device_uuid == device_uuid: continue
+        device_tuple = device_dict.get(device_uuid)
+        if device_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_uuid)))
+        json_device,_ = device_tuple
+        device_type = json_device['device_type']
+        resource_group = DEVICE_TYPE_TO_LAYER.get(device_type)
+        if resource_group is None: raise Exception('Undefined Layer for DeviceType({:s})'.format(str(device_type)))
+
+        if prv_resource_group is None:
+            # path ingress
+            connection_stack.put((main_service_uuid, main_service_type, [path_hop], []))
+        elif prv_resource_group > resource_group:
+            # underlying connection begins
+            connection_uuid = str(uuid.uuid4())
+            connection_stack.put((connection_uuid, resource_group, [path_hop], []))
+        elif prv_resource_group == resource_group:
+            # same connection continues
+            connection_stack.queue[-1][2].append(path_hop)
+        elif prv_resource_group < resource_group:
+            # underlying connection ended
+            connection = connection_stack.get()
+            connections.append(connection)
+            connection_stack.queue[-1][3].append(connection[0])
+            connection_stack.queue[-1][2].append(path_hop)
+        else:
+            raise Exception('Uncontrolled condition')
+
+        prv_resource_group = resource_group
+        prv_device_uuid = device_uuid
+
+    # path egress
+    connections.append(connection_stack.get())
+    assert connection_stack.empty()
+    return connections
+
+def convert_explicit_path_hops_to_plain_connection(
+    path_hops : List[Dict], main_service_uuid : str, main_service_type : ServiceTypeEnum
+) -> List[Tuple[str, int, List[str], List[str]]]:
+
+    connection : Tuple[str, int, List[str], List[str]] = \
+        (main_service_uuid, main_service_type, [], [])
+
+    prv_device_uuid = None
+    for path_hop in path_hops:
+        device_uuid = path_hop['device']
+        if prv_device_uuid == device_uuid: continue
+        connection[2].append(path_hop)
+        prv_device_uuid = device_uuid
+
+    return [connection]
-- 
GitLab


From 20ee05ab89a0600880f1f4d25c58e048725ddb20 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 17:01:25 +0000
Subject: [PATCH 176/229] Updated TODO file

---
 TODO.txt | 36 +++++++++++++++---------------------
 1 file changed, 15 insertions(+), 21 deletions(-)

diff --git a/TODO.txt b/TODO.txt
index 714fab583..0e6b21c61 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -1,28 +1,22 @@
-- MW mock sdn ctrl: post does not work
-- implement mock IPM controller
-
+PENDING:
+- no rule is composed for IPM controller
+- no rule is composed for L2VPN TFS SBI
 - pending infinera tests
 - test with Slice NBI
 - integrate Slice NBI in Load Gen
-- import subdevices TAPI, MW, INF
-
-- Device:
-    - IetfL2VpnDriver should not import links; otherwise, might confuse path computation component
-        - [] Add flag to control that
-    - MW Driver should import topology, there should be nothing between antennas
-    - IPM Driver should import devices but not links, TAPI in between
-    - TAPI Driver: add flag to choose; might be required in some cases
-    - enbale to create links (connectivity between subdevices)
+- sort endpoints in service and slice as done for links
 
-- OLS service: from input to input endpoint ??
-
-- pathcomp should not create reversed links
-- bidirectional links should be duplicated in frontend
-- pathcomp should honor input/output of tapi endpoints
+ONGOING:
+- implement mock IPM controller
 
 TO TEST:
-- Test with new changes in pathcomp and subservice config rule composition
-- Test device manager config in device works; rules should go to manager, not to underlying
-- ietf-l2vpn driver: test service is created
-- if there is a config rule for a endpoint in subservice, move the rule from main to that subservice
 
+
+OPTIONAL:
+    - Optimize requests pathcomp--context
+    - Optimize requests webui--context
+    - TransportAPIDriver: add flag to import underlying topology options: 'disabled/devices/all'
+    - IetfL2VpnDriver: add flag to import underlying topology options: 'disabled/devices/all'
+    - MWDriver should import topology, there should be nothing between antennas
+    - Enable to create links (connectivity between subdevices)
+    - bidirectional links should be duplicated by frontend in a smart way
-- 
GitLab


From 09d9f0ae890fe9a9ddcbb824673afbf368d9aeb0 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 17:37:33 +0000
Subject: [PATCH 177/229] Device component:

- Renamed device "manager" to device "controller"
---
 .../service/DeviceServiceServicerImpl.py      | 15 +++++++-------
 src/device/service/Tools.py                   | 20 +++++++++----------
 2 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/src/device/service/DeviceServiceServicerImpl.py b/src/device/service/DeviceServiceServicerImpl.py
index b89766b29..2b08b6c7e 100644
--- a/src/device/service/DeviceServiceServicerImpl.py
+++ b/src/device/service/DeviceServiceServicerImpl.py
@@ -28,9 +28,9 @@ from .driver_api.DriverInstanceCache import DriverInstanceCache, get_driver
 from .monitoring.MonitoringLoops import MonitoringLoops
 from .ErrorMessages import ERROR_MISSING_DRIVER, ERROR_MISSING_KPI
 from .Tools import (
-    check_connect_rules, check_no_endpoints, compute_rules_to_add_delete, configure_rules, deconfigure_rules, get_device_manager_uuid,
-    populate_config_rules, populate_endpoint_monitoring_resources, populate_endpoints, populate_initial_config_rules,
-    subscribe_kpi, unsubscribe_kpi, update_endpoints)
+    check_connect_rules, check_no_endpoints, compute_rules_to_add_delete, configure_rules, deconfigure_rules,
+    get_device_controller_uuid, populate_config_rules, populate_endpoint_monitoring_resources, populate_endpoints,
+    populate_initial_config_rules, subscribe_kpi, unsubscribe_kpi, update_endpoints)
 
 LOGGER = logging.getLogger(__name__)
 
@@ -125,11 +125,12 @@ class DeviceServiceServicerImpl(DeviceServiceServicer):
             if device is None:
                 raise NotFoundException('Device', device_uuid, extra_details='loading in ConfigureDevice')
 
-            device_manager_uuid = get_device_manager_uuid(device)
-            if device_manager_uuid is not None:
-                device = get_device(context_client, device_manager_uuid, rw_copy=True)
+            device_controller_uuid = get_device_controller_uuid(device)
+            if device_controller_uuid is not None:
+                device = get_device(context_client, device_controller_uuid, rw_copy=True)
                 if device is None:
-                    raise NotFoundException('Device', device_manager_uuid, extra_details='loading in ConfigureDevice')
+                    raise NotFoundException(
+                        'Device', device_controller_uuid, extra_details='loading in ConfigureDevice')
 
             driver : _Driver = get_driver(self.driver_instance_cache, device)
             if driver is None:
diff --git a/src/device/service/Tools.py b/src/device/service/Tools.py
index 3694ce129..cd3af07e3 100644
--- a/src/device/service/Tools.py
+++ b/src/device/service/Tools.py
@@ -78,12 +78,12 @@ def check_no_endpoints(device_endpoints) -> None:
         extra_details='RPC method AddDevice does not accept Endpoints. Endpoints are discovered through '\
                         'interrogation of the physical device.')
 
-def get_device_manager_uuid(device : Device) -> Optional[str]:
+def get_device_controller_uuid(device : Device) -> Optional[str]:
     for config_rule in device.device_config.config_rules:
         if config_rule.WhichOneof('config_rule') != 'custom': continue
-        if config_rule.custom.resource_key != '_manager': continue
-        device_manager_id = json.loads(config_rule.custom.resource_value)
-        return device_manager_id['uuid']
+        if config_rule.custom.resource_key != '_controller': continue
+        device_controller_id = json.loads(config_rule.custom.resource_value)
+        return device_controller_id['uuid']
     return None
 
 def populate_endpoints(
@@ -140,13 +140,13 @@ def populate_endpoints(
             _sub_device.device_operational_status = resource_value['status']
             
             # Sub-devices should not have a driver assigned. Instead, they should have
-            # a config rule specifying their manager.
+            # a config rule specifying their controller.
             #_sub_device.device_drivers.extend(resource_value['drivers'])        # pylint: disable=no-member
-            manager_config_rule = _sub_device.device_config.config_rules.add()
-            manager_config_rule.action = ConfigActionEnum.CONFIGACTION_SET
-            manager_config_rule.custom.resource_key = '_manager'
-            manager = {'uuid': device_uuid, 'name': device_name}
-            manager_config_rule.custom.resource_value = json.dumps(manager, indent=0, sort_keys=True)
+            controller_config_rule = _sub_device.device_config.config_rules.add()
+            controller_config_rule.action = ConfigActionEnum.CONFIGACTION_SET
+            controller_config_rule.custom.resource_key = '_controller'
+            controller = {'uuid': device_uuid, 'name': device_name}
+            controller_config_rule.custom.resource_value = json.dumps(controller, indent=0, sort_keys=True)
 
             new_sub_devices[_sub_device_uuid] = _sub_device
 
-- 
GitLab


From d9711a72097df632980bf338ae1ecbb6e03a654b Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 17:38:03 +0000
Subject: [PATCH 178/229] PathComp component - Frontend:

- Renamed device "manager" to device "controller"
---
 .../algorithms/tools/ComputeSubServices.py    |  4 ++--
 .../algorithms/tools/ResourceGroups.py        | 24 +++++++++----------
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py b/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
index 1f2b4df9c..40cb08576 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ComputeSubServices.py
@@ -88,10 +88,10 @@ def convert_explicit_path_hops_to_connections(
         elif prv_res_class[0] == res_class[0]:
             # same resource group kind
             if prv_res_class[1] == res_class[1] and prv_res_class[2] == res_class[2]:
-                # same device type and device manager: connection continues
+                # same device type and device controller: connection continues
                 connection_stack.queue[-1][2].append(path_hop)
             else:
-                # different device type or device manager: chain connections
+                # different device type or device controller: chain connections
                 connection = connection_stack.get()
                 connections.append(connection)
                 connection_stack.queue[-1][3].append(connection[0])
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py b/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py
index 0f6ee63dc..53c89cd12 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py
@@ -54,14 +54,14 @@ DEVICE_TYPE_TO_DEEPNESS = {
 
 IGNORED_DEVICE_TYPES = {DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER}
 
-def get_device_manager_uuid(
+def get_device_controller_uuid(
     device : Device
 ) -> Optional[str]:
     for config_rule in device.device_config.config_rules:
         if config_rule.WhichOneof('config_rule') != 'custom': continue
-        if config_rule.custom.resource_key != '_manager': continue
-        device_manager_id = json.loads(config_rule.custom.resource_value)
-        return device_manager_id['uuid']
+        if config_rule.custom.resource_key != '_controller': continue
+        device_controller_id = json.loads(config_rule.custom.resource_value)
+        return device_controller_id['uuid']
     return None
 
 def _map_device_type(device : Device) -> DeviceTypeEnum:
@@ -77,18 +77,18 @@ def _map_resource_to_deepness(device_type : DeviceTypeEnum) -> int:
     return deepness
 
 def get_device_type(
-    device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_manager_uuid : Optional[str]
+    device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_controller_uuid : Optional[str]
 ) -> DeviceTypeEnum:
-    if device_manager_uuid is None: return _map_device_type(device)
-    device_manager_tuple = device_dict.get(device_manager_uuid)
-    if device_manager_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_manager_uuid)))
-    _,device = device_manager_tuple
+    if device_controller_uuid is None: return _map_device_type(device)
+    device_controller_tuple = device_dict.get(device_controller_uuid)
+    if device_controller_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_controller_uuid)))
+    _,device = device_controller_tuple
     return _map_device_type(device)
 
 def get_resource_classification(
     device : Device, device_dict : Dict[str, Tuple[Dict, Device]]
 ) -> Tuple[int, DeviceTypeEnum, Optional[str]]:
-    device_manager_uuid = get_device_manager_uuid(device)
-    device_type = get_device_type(device, device_dict, device_manager_uuid)
+    device_controller_uuid = get_device_controller_uuid(device)
+    device_type = get_device_type(device, device_dict, device_controller_uuid)
     resource_deepness = _map_resource_to_deepness(device_type)
-    return resource_deepness, device_type, device_manager_uuid
+    return resource_deepness, device_type, device_controller_uuid
-- 
GitLab


From c0a1c3c605d1cdc83cf0556656920cb28eee431c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 17:39:39 +0000
Subject: [PATCH 179/229] Service component:

- Renamed device "manager" to device "controller"
- Extended TAPI Service Handler to support optional device controllers
- Fixed IETF L2VPN Service Handler delete to support optional device controllers
---
 .../L2NM_IETFL2VPN_ServiceHandler.py          | 35 ++++++------
 .../tapi_tapi/TapiServiceHandler.py           | 56 +++++++++++--------
 .../service/task_scheduler/TaskExecutor.py    | 32 +++++------
 3 files changed, 69 insertions(+), 54 deletions(-)

diff --git a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
index 7a2c4e723..9adc15494 100644
--- a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
+++ b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
@@ -55,16 +55,16 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
             src_device_uuid, src_endpoint_uuid = get_device_endpoint_uuids(endpoints[0])
             src_device = self.__task_executor.get_device(DeviceId(**json_device_id(src_device_uuid)))
             src_endpoint = get_endpoint_matching(src_device, src_endpoint_uuid)
-            src_manager =  self.__task_executor.get_device_manager(src_device)
+            src_controller = self.__task_executor.get_device_controller(src_device)
 
             dst_device_uuid, dst_endpoint_uuid = get_device_endpoint_uuids(endpoints[1])
             dst_device = self.__task_executor.get_device(DeviceId(**json_device_id(dst_device_uuid)))
             dst_endpoint = get_endpoint_matching(dst_device, dst_endpoint_uuid)
-            dst_manager =  self.__task_executor.get_device_manager(dst_device)
+            dst_controller = self.__task_executor.get_device_controller(dst_device)
 
-            if src_manager.device_id.device_uuid.uuid != dst_manager.device_id.device_uuid.uuid:
+            if src_controller.device_id.device_uuid.uuid != dst_controller.device_id.device_uuid.uuid:
                 raise Exception('Different Src-Dst devices not supported by now')
-            manager = src_manager
+            controller = src_controller
 
             json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
                 'uuid'              : service_uuid,
@@ -75,9 +75,9 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
                 'encapsulation_type': encap_type,
                 'vlan_id'           : vlan_id,
             })
-            del manager.device_config.config_rules[:]
-            manager.device_config.config_rules.append(ConfigRule(**json_config_rule))
-            self.__task_executor.configure_device(manager)
+            del controller.device_config.config_rules[:]
+            controller.device_config.config_rules.append(ConfigRule(**json_config_rule))
+            self.__task_executor.configure_device(controller)
             results.append(True)
         except Exception as e: # pylint: disable=broad-except
             LOGGER.exception('Unable to SetEndpoint for Service({:s})'.format(str(service_uuid)))
@@ -97,21 +97,24 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
 
         results = []
         try:
-            device_uuid_src, _ = get_device_endpoint_uuids(endpoints[0])
-            device_uuid_dst, _ = get_device_endpoint_uuids(endpoints[1])
+            src_device_uuid, _ = get_device_endpoint_uuids(endpoints[0])
+            src_device = self.__task_executor.get_device(DeviceId(**json_device_id(src_device_uuid)))
+            src_controller = self.__task_executor.get_device_controller(src_device)
 
-            if device_uuid_src != device_uuid_dst:
-                raise Exception('Different Src-Dst devices not supported by now')
-            device_uuid = device_uuid_src
+            dst_device_uuid, _ = get_device_endpoint_uuids(endpoints[1])
+            dst_device = self.__task_executor.get_device(DeviceId(**json_device_id(dst_device_uuid)))
+            dst_controller = self.__task_executor.get_device_controller(dst_device)
 
-            device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+            if src_controller.device_id.device_uuid.uuid != dst_controller.device_id.device_uuid.uuid:
+                raise Exception('Different Src-Dst devices not supported by now')
+            controller = src_controller
 
             json_config_rule = json_config_rule_delete('/services/service[{:s}]'.format(service_uuid), {
                 'uuid': service_uuid
             })
-            del device_obj.device_config.config_rules[:]
-            device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
-            self.__task_executor.configure_device(device_obj)
+            del controller.device_config.config_rules[:]
+            controller.device_config.config_rules.append(ConfigRule(**json_config_rule))
+            self.__task_executor.configure_device(controller)
             results.append(True)
         except Exception as e: # pylint: disable=broad-except
             LOGGER.exception('Unable to DeleteEndpoint for Service({:s})'.format(str(service_uuid)))
diff --git a/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py b/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py
index dd9ff092a..ee9c4a66d 100644
--- a/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py
+++ b/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py
@@ -19,7 +19,7 @@ from common.proto.context_pb2 import ConfigRule, DeviceId, Service
 from common.tools.object_factory.ConfigRule import json_config_rule_delete, json_config_rule_set
 from common.tools.object_factory.Device import json_device_id
 from common.type_checkers.Checkers import chk_type
-from service.service.service_handler_api.Tools import get_device_endpoint_uuids
+from service.service.service_handler_api.Tools import get_device_endpoint_uuids, get_endpoint_matching
 from service.service.service_handler_api._ServiceHandler import _ServiceHandler
 from service.service.service_handler_api.SettingsHandler import SettingsHandler
 from service.service.task_scheduler.TaskExecutor import TaskExecutor
@@ -55,28 +55,35 @@ class TapiServiceHandler(_ServiceHandler):
 
         results = []
         try:
-            device_uuid_src, endpoint_uuid_src = get_device_endpoint_uuids(endpoints[0])
-            device_uuid_dst, endpoint_uuid_dst = get_device_endpoint_uuids(endpoints[1])
-
-            if device_uuid_src != device_uuid_dst:
+            src_device_uuid, src_endpoint_uuid = get_device_endpoint_uuids(endpoints[0])
+            src_device = self.__task_executor.get_device(DeviceId(**json_device_id(src_device_uuid)))
+            src_endpoint = get_endpoint_matching(src_device, src_endpoint_uuid)
+            src_controller = self.__task_executor.get_device_controller(src_device)
+            if src_controller is None: src_controller = src_device
+
+            dst_device_uuid, dst_endpoint_uuid = get_device_endpoint_uuids(endpoints[1])
+            dst_device = self.__task_executor.get_device(DeviceId(**json_device_id(dst_device_uuid)))
+            dst_endpoint = get_endpoint_matching(dst_device, dst_endpoint_uuid)
+            dst_controller = self.__task_executor.get_device_controller(dst_device)
+            if dst_controller is None: dst_controller = dst_device
+
+            if src_controller.device_id.device_uuid.uuid != dst_controller.device_id.device_uuid.uuid:
                 raise Exception('Different Src-Dst devices not supported by now')
-            device_uuid = device_uuid_src
-
-            device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+            controller = src_controller
 
             json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
                 'uuid'                    : service_uuid,
-                'input_sip'               : endpoint_uuid_src,
-                'output_sip'              : endpoint_uuid_dst,
+                'input_sip'               : src_endpoint.name,
+                'output_sip'              : dst_endpoint.name,
                 'capacity_unit'           : capacity_unit,
                 'capacity_value'          : capacity_value,
                 'layer_protocol_name'     : layer_proto_name,
                 'layer_protocol_qualifier': layer_proto_qual,
                 'direction'               : direction,
             })
-            del device_obj.device_config.config_rules[:]
-            device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
-            self.__task_executor.configure_device(device_obj)
+            del controller.device_config.config_rules[:]
+            controller.device_config.config_rules.append(ConfigRule(**json_config_rule))
+            self.__task_executor.configure_device(controller)
             results.append(True)
         except Exception as e: # pylint: disable=broad-except
             LOGGER.exception('Unable to SetEndpoint for Service({:s})'.format(str(service_uuid)))
@@ -96,21 +103,26 @@ class TapiServiceHandler(_ServiceHandler):
 
         results = []
         try:
-            device_uuid_src, _ = get_device_endpoint_uuids(endpoints[0])
-            device_uuid_dst, _ = get_device_endpoint_uuids(endpoints[1])
+            src_device_uuid, _ = get_device_endpoint_uuids(endpoints[0])
+            src_device = self.__task_executor.get_device(DeviceId(**json_device_id(src_device_uuid)))
+            src_controller = self.__task_executor.get_device_controller(src_device)
+            if src_controller is None: src_controller = src_device
 
-            if device_uuid_src != device_uuid_dst:
-                raise Exception('Different Src-Dst devices not supported by now')
-            device_uuid = device_uuid_src
+            dst_device_uuid, _ = get_device_endpoint_uuids(endpoints[1])
+            dst_device = self.__task_executor.get_device(DeviceId(**json_device_id(dst_device_uuid)))
+            dst_controller = self.__task_executor.get_device_controller(dst_device)
+            if dst_controller is None: dst_controller = dst_device
 
-            device_obj = self.__task_executor.get_device(DeviceId(**json_device_id(device_uuid)))
+            if src_controller.device_id.device_uuid.uuid != dst_controller.device_id.device_uuid.uuid:
+                raise Exception('Different Src-Dst devices not supported by now')
+            controller = src_controller
 
             json_config_rule = json_config_rule_delete('/services/service[{:s}]'.format(service_uuid), {
                 'uuid': service_uuid
             })
-            del device_obj.device_config.config_rules[:]
-            device_obj.device_config.config_rules.append(ConfigRule(**json_config_rule))
-            self.__task_executor.configure_device(device_obj)
+            del controller.device_config.config_rules[:]
+            controller.device_config.config_rules.append(ConfigRule(**json_config_rule))
+            self.__task_executor.configure_device(controller)
             results.append(True)
         except Exception as e: # pylint: disable=broad-except
             LOGGER.exception('Unable to DeleteEndpoint for Service({:s})'.format(str(service_uuid)))
diff --git a/src/service/service/task_scheduler/TaskExecutor.py b/src/service/service/task_scheduler/TaskExecutor.py
index 54aef8c37..3d157e314 100644
--- a/src/service/service/task_scheduler/TaskExecutor.py
+++ b/src/service/service/task_scheduler/TaskExecutor.py
@@ -105,24 +105,24 @@ class TaskExecutor:
         self._device_client.ConfigureDevice(device)
         self._store_grpc_object(CacheableObjectType.DEVICE, device_key, device)
 
-    def get_device_manager(self, device : Device) -> Optional[Device]:
-        json_manager = None
+    def get_device_controller(self, device : Device) -> Optional[Device]:
+        json_controller = None
         for config_rule in device.device_config.config_rules:
             if config_rule.WhichOneof('config_rule') != 'custom': continue
-            if config_rule.custom.resource_key != '_manager': continue
-            json_manager = json.loads(config_rule.custom.resource_value)
+            if config_rule.custom.resource_key != '_controller': continue
+            json_controller = json.loads(config_rule.custom.resource_value)
             break
 
-        if json_manager is None: return None
+        if json_controller is None: return None
 
-        manager_uuid = json_manager['uuid']
-        manager = self.get_device(DeviceId(**json_device_id(manager_uuid)))
-        manager_uuid = manager.device_id.device_uuid.uuid
-        if manager is None: raise Exception('Device({:s}) not found'.format(str(manager_uuid)))
-        return manager
+        controller_uuid = json_controller['uuid']
+        controller = self.get_device(DeviceId(**json_device_id(controller_uuid)))
+        controller_uuid = controller.device_id.device_uuid.uuid
+        if controller is None: raise Exception('Device({:s}) not found'.format(str(controller_uuid)))
+        return controller
 
     def get_devices_from_connection(
-        self, connection : Connection, exclude_managed : bool = False
+        self, connection : Connection, exclude_managed_by_controller : bool = False
     ) -> Dict[str, Device]:
         devices = dict()
         for endpoint_id in connection.path_hops_endpoint_ids:
@@ -130,13 +130,13 @@ class TaskExecutor:
             device_uuid = endpoint_id.device_id.device_uuid.uuid
             if device is None: raise Exception('Device({:s}) not found'.format(str(device_uuid)))
 
-            manager = self.get_device_manager(device)
-            if manager is None:
+            controller = self.get_device_controller(device)
+            if controller is None:
                 devices[device_uuid] = device
             else:
-                if not exclude_managed:
+                if not exclude_managed_by_controller:
                     devices[device_uuid] = device
-                devices[manager.device_id.device_uuid.uuid] = manager
+                devices[controller.device_id.device_uuid.uuid] = controller
         return devices
 
     # ----- Service-related methods ------------------------------------------------------------------------------------
@@ -166,6 +166,6 @@ class TaskExecutor:
     def get_service_handler(
         self, connection : Connection, service : Service, **service_handler_settings
     ) -> '_ServiceHandler':
-        connection_devices = self.get_devices_from_connection(connection, exclude_managed=True)
+        connection_devices = self.get_devices_from_connection(connection, exclude_managed_by_controller=True)
         service_handler_class = get_service_handler_class(self._service_handler_factory, service, connection_devices)
         return service_handler_class(service, self, **service_handler_settings)
-- 
GitLab


From 0428b3743a7604fd8c0df41bb93014cf48753b07 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 17:40:21 +0000
Subject: [PATCH 180/229] Test Pathcomp:

- Renamed device "manager" to device "controller"
- Extended TAPI Service Handler to support optional device controllers
- Fixed IETF L2VPN Service Handler delete to support optional device controllers
---
 test_pathcomp/ComputeSubServices.py |  4 +--
 test_pathcomp/ResourceGroups.py     | 24 +++++++++---------
 test_pathcomp/data.py               | 38 ++++++++++++++---------------
 3 files changed, 33 insertions(+), 33 deletions(-)

diff --git a/test_pathcomp/ComputeSubServices.py b/test_pathcomp/ComputeSubServices.py
index 1f2b4df9c..40cb08576 100644
--- a/test_pathcomp/ComputeSubServices.py
+++ b/test_pathcomp/ComputeSubServices.py
@@ -88,10 +88,10 @@ def convert_explicit_path_hops_to_connections(
         elif prv_res_class[0] == res_class[0]:
             # same resource group kind
             if prv_res_class[1] == res_class[1] and prv_res_class[2] == res_class[2]:
-                # same device type and device manager: connection continues
+                # same device type and device controller: connection continues
                 connection_stack.queue[-1][2].append(path_hop)
             else:
-                # different device type or device manager: chain connections
+                # different device type or device controller: chain connections
                 connection = connection_stack.get()
                 connections.append(connection)
                 connection_stack.queue[-1][3].append(connection[0])
diff --git a/test_pathcomp/ResourceGroups.py b/test_pathcomp/ResourceGroups.py
index 7b3888144..17991ee33 100644
--- a/test_pathcomp/ResourceGroups.py
+++ b/test_pathcomp/ResourceGroups.py
@@ -53,14 +53,14 @@ DEVICE_TYPE_TO_DEEPNESS = {
 
 IGNORED_DEVICE_TYPES = {DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER}
 
-def get_device_manager_uuid(
+def get_device_controller_uuid(
     device : Device
 ) -> Optional[str]:
     for config_rule in device.device_config.config_rules:
         if config_rule.WhichOneof('config_rule') != 'custom': continue
-        if config_rule.custom.resource_key != '_manager': continue
-        device_manager_id = json.loads(config_rule.custom.resource_value)
-        return device_manager_id['uuid']
+        if config_rule.custom.resource_key != '_controller': continue
+        device_controller_id = json.loads(config_rule.custom.resource_value)
+        return device_controller_id['uuid']
     return None
 
 def _map_device_type(device : Device) -> DeviceTypeEnum:
@@ -76,18 +76,18 @@ def _map_resource_to_deepness(device_type : DeviceTypeEnum) -> int:
     return deepness
 
 def get_device_type(
-    device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_manager_uuid : Optional[str]
+    device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_controller_uuid : Optional[str]
 ) -> DeviceTypeEnum:
-    if device_manager_uuid is None: return _map_device_type(device)
-    device_manager_tuple = device_dict.get(device_manager_uuid)
-    if device_manager_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_manager_uuid)))
-    _,device = device_manager_tuple
+    if device_controller_uuid is None: return _map_device_type(device)
+    device_controller_tuple = device_dict.get(device_controller_uuid)
+    if device_controller_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_controller_uuid)))
+    _,device = device_controller_tuple
     return _map_device_type(device)
 
 def get_resource_classification(
     device : Device, device_dict : Dict[str, Tuple[Dict, Device]]
 ) -> Tuple[int, DeviceTypeEnum, Optional[str]]:
-    device_manager_uuid = get_device_manager_uuid(device)
-    device_type = get_device_type(device, device_dict, device_manager_uuid)
+    device_controller_uuid = get_device_controller_uuid(device)
+    device_type = get_device_type(device, device_dict, device_controller_uuid)
     resource_deepness = _map_resource_to_deepness(device_type)
-    return resource_deepness, device_type, device_manager_uuid
+    return resource_deepness, device_type, device_controller_uuid
diff --git a/test_pathcomp/data.py b/test_pathcomp/data.py
index 399c5ff60..aeac5e38a 100644
--- a/test_pathcomp/data.py
+++ b/test_pathcomp/data.py
@@ -31,37 +31,37 @@ path_hops = [
 ]
 
 device_data = {
-    'TFS'     : {'manager_uuid': None,  'device_type': DeviceTypeEnum.TERAFLOWSDN_CONTROLLER   },
-    'IPM'     : {'manager_uuid': None,  'device_type': DeviceTypeEnum.XR_CONSTELLATION         },
-    'OLS'     : {'manager_uuid': None,  'device_type': DeviceTypeEnum.OPEN_LINE_SYSTEM         },
-    'MW1-2'   : {'manager_uuid': None,  'device_type': DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM   },
-    'MW3-4'   : {'manager_uuid': None,  'device_type': DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM   },
+    'TFS'     : {'controller_uuid': None,  'device_type': DeviceTypeEnum.TERAFLOWSDN_CONTROLLER   },
+    'IPM'     : {'controller_uuid': None,  'device_type': DeviceTypeEnum.XR_CONSTELLATION         },
+    'OLS'     : {'controller_uuid': None,  'device_type': DeviceTypeEnum.OPEN_LINE_SYSTEM         },
+    'MW1-2'   : {'controller_uuid': None,  'device_type': DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM   },
+    'MW3-4'   : {'controller_uuid': None,  'device_type': DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM   },
 
-    'DC1'     : {'manager_uuid': None,  'device_type': DeviceTypeEnum.EMULATED_DATACENTER      },
-    'DC2'     : {'manager_uuid': None,  'device_type': DeviceTypeEnum.EMULATED_DATACENTER      },
+    'DC1'     : {'controller_uuid': None,  'device_type': DeviceTypeEnum.EMULATED_DATACENTER      },
+    'DC2'     : {'controller_uuid': None,  'device_type': DeviceTypeEnum.EMULATED_DATACENTER      },
 
-    'PE1'     : {'manager_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
-    'PE2'     : {'manager_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
-    'PE3'     : {'manager_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
-    'PE4'     : {'manager_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'PE1'     : {'controller_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'PE2'     : {'controller_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'PE3'     : {'controller_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'PE4'     : {'controller_uuid': 'TFS', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
 
-    'HUB1'    : {'manager_uuid': 'IPM', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
-    'LEAF1'   : {'manager_uuid': 'IPM', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
-    'LEAF2'   : {'manager_uuid': 'IPM', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'HUB1'    : {'controller_uuid': 'IPM', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'LEAF1'   : {'controller_uuid': 'IPM', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
+    'LEAF2'   : {'controller_uuid': 'IPM', 'device_type': DeviceTypeEnum.PACKET_ROUTER            },
 
-    'splitter': {'manager_uuid': None,  'device_type': DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER},
+    'splitter': {'controller_uuid': None,  'device_type': DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER},
 }
 
 def process_device(device_uuid, json_device) -> Tuple[Dict, Device]:
     grpc_device = Device()
     grpc_device.device_id.device_uuid.uuid = device_uuid            # pylint: disable=no-member
     grpc_device.device_type = json_device['device_type'].value
-    manager_uuid = json_device.get('manager_uuid')
-    if manager_uuid is not None:
+    controller_uuid = json_device.get('controller_uuid')
+    if controller_uuid is not None:
         config_rule = grpc_device.device_config.config_rules.add()  # pylint: disable=no-member
         config_rule.action = ConfigActionEnum.CONFIGACTION_SET
-        config_rule.custom.resource_key = '_manager'
-        config_rule.custom.resource_value = json.dumps({'uuid': manager_uuid})
+        config_rule.custom.resource_key = '_controller'
+        config_rule.custom.resource_value = json.dumps({'uuid': controller_uuid})
     return json_device, grpc_device
 
 device_dict = {
-- 
GitLab


From c2ac8acee836beb772b7f65ab939517354b3069b Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 17:40:45 +0000
Subject: [PATCH 181/229] Moved helper script format.sh to root and renamed to
 map_names.sh

---
 map_names.sh            | 59 +++++++++++++++++++++++++++++++++++++++++
 test_pathcomp/format.sh | 56 --------------------------------------
 2 files changed, 59 insertions(+), 56 deletions(-)
 create mode 100755 map_names.sh
 delete mode 100755 test_pathcomp/format.sh

diff --git a/map_names.sh b/map_names.sh
new file mode 100755
index 000000000..e3bcc5640
--- /dev/null
+++ b/map_names.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+sed -i 's#0dff8c06-873b-5799-ac54-c0452252bae1#R3#g' service.log
+sed -i 's#1102e0b5-824b-57eb-86a1-d247e2deaf68#PE4#g' service.log
+sed -i 's#29d766ca-d222-5257-bab3-6a060719270a#PE2#g' service.log
+sed -i 's#68741528-2e94-5274-ab3c-fddcd8dc05ef#R1#g' service.log
+sed -i 's#69a3a3f0-5237-5f9e-bc96-d450d0c6c02a#PE3#g' service.log
+sed -i 's#6ab8fa38-ec20-5c32-8d9b-4fd86fce2555#OLS#g' service.log
+sed -i 's#7faa13eb-903d-58f5-936b-1a1174fe98fd#PE1#g' service.log
+sed -i 's#800d5bd4-a7a3-5a66-82ab-d399767ca3d8#DC2#g' service.log
+sed -i 's#93c69975-3870-5892-955b-da0ff36eb884#MW1-2#g' service.log
+sed -i 's#f185c8cf-37e5-51cc-9f71-076b775a574d#MW3-4#g' service.log
+sed -i 's#a23cdc36-074d-5423-8abd-4a167a6e6fbc#TFS#g' service.log
+sed -i 's#c944aaeb-bbdf-5f2d-b31c-8cc8903045b6#R2#g' service.log
+sed -i 's#cda90d2f-e7b0-5837-8f2e-2fb29dd9b367#DC1#g' service.log
+sed -i 's#79f4184c-d375-5e2c-a3df-1ae64537c95c#1/1#g' service.log
+sed -i 's#93c853c2-429c-52e8-9ba9-454fcedb9090#1/2#g' service.log
+sed -i 's#1fe2ee1a-fe92-57c9-afd9-260e6f0ecc54#mgmt#g' service.log
+sed -i 's#cd378805-d73e-5681-8514-1d33e656c0e9#1/1#g' service.log
+sed -i 's#e502e939-3ab8-5fee-8277-7fd1c1c0fa93#1/2#g' service.log
+sed -i 's#780f6929-a863-5e6a-a046-3dac2e24bf58#1/1#g' service.log
+sed -i 's#f1082088-a304-587b-a230-b8ce10e5a148#mgmt#g' service.log
+sed -i 's#ffdfb0ce-1684-5d39-bad3-9ff1eb4ffbf8#1/2#g' service.log
+sed -i 's#268b735d-c861-5319-88a4-2ea498f96a04#1/1#g' service.log
+sed -i 's#62c0cba1-9ee8-5db5-82da-ce96d7e0f39f#1/3#g' service.log
+sed -i 's#7d1bf45c-5ab2-525e-87a4-c0ddcd5c18e4#1/2#g' service.log
+sed -i 's#2b11934b-dfd7-5267-87b9-7306a24e0182#1/1#g' service.log
+sed -i 's#ca92338e-2038-5d74-8ef1-2b20a234a8b9#1/2#g' service.log
+sed -i 's#f8955e74-4e93-5d43-a968-9626ee5c9b53#mgmt#g' service.log
+sed -i 's#2b75d88d-095f-5752-a10a-1ff69df8008d#1/2#g' service.log
+sed -i 's#bf0d75db-acf8-53cb-b6db-32d9dc0878c4#mgmt#g' service.log
+sed -i 's#eeade85a-03df-55d2-bfc2-2af7267bbcf3#1/1#g' service.log
+sed -i 's#06bb0b92-8783-5599-aa20-15bfbe241348#eth1#g' service.log
+sed -i 's#6a6859c3-4a13-513c-a7dd-490c8b2931b1#eth2#g' service.log
+sed -i 's#97f57787-cfec-5315-9718-7e850905f11a#int#g' service.log
+sed -i 's#01251c49-6d35-5c70-8480-576991321d15#172.18.0.1:1#g' service.log
+sed -i 's#023ac3a2-35bb-53cf-9173-a0b4f979af58#172.18.0.2:1#g' service.log
+sed -i 's#1b4e8958-f1c2-5ef7-9297-f4e9756275f9#172.18.0.3:1#g' service.log
+sed -i 's#f6cdc04b-1a12-537f-b0cc-daefdb89b61c#172.18.0.4:1#g' service.log
+sed -i 's#85bb83b0-8d96-5e76-9959-97c35036d4f9#mgmt#g' service.log
+sed -i 's#313fb1ed-5dee-5e49-884a-cbb3b1e00073#1/2#g' service.log
+sed -i 's#79699f56-df25-5188-a389-04606c24fbfc#1/1#g' service.log
+sed -i 's#37ab67ef-0064-54e3-ae9b-d40100953834#int#g' service.log
+sed -i 's#55e88b6b-ccf7-538f-a062-a41219292ea1#eth1#g' service.log
+sed -i 's#68b5972b-3630-53a8-ba9b-cc54dd31f8b8#eth2#g' service.log
diff --git a/test_pathcomp/format.sh b/test_pathcomp/format.sh
deleted file mode 100755
index ceeea5d31..000000000
--- a/test_pathcomp/format.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/bash
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-sed -i 's#0dff8c06-873b-5799-ac54-c0452252bae1#R3#g' log.txt
-sed -i 's#1102e0b5-824b-57eb-86a1-d247e2deaf68#PE4#g' log.txt
-sed -i 's#29d766ca-d222-5257-bab3-6a060719270a#PE2#g' log.txt
-sed -i 's#68741528-2e94-5274-ab3c-fddcd8dc05ef#R1#g' log.txt
-sed -i 's#69a3a3f0-5237-5f9e-bc96-d450d0c6c02a#PE3#g' log.txt
-sed -i 's#6ab8fa38-ec20-5c32-8d9b-4fd86fce2555#OLS#g' log.txt
-sed -i 's#7faa13eb-903d-58f5-936b-1a1174fe98fd#PE1#g' log.txt
-sed -i 's#800d5bd4-a7a3-5a66-82ab-d399767ca3d8#DC2#g' log.txt
-sed -i 's#90c22ce2-4f8d-51b4-8d7a-762eea9b310a#MW#g' log.txt
-sed -i 's#a23cdc36-074d-5423-8abd-4a167a6e6fbc#TFS#g' log.txt
-sed -i 's#c944aaeb-bbdf-5f2d-b31c-8cc8903045b6#R2#g' log.txt
-sed -i 's#cda90d2f-e7b0-5837-8f2e-2fb29dd9b367#DC1#g' log.txt
-sed -i 's#79f4184c-d375-5e2c-a3df-1ae64537c95c#1/1#g' log.txt
-sed -i 's#93c853c2-429c-52e8-9ba9-454fcedb9090#1/2#g' log.txt
-sed -i 's#1fe2ee1a-fe92-57c9-afd9-260e6f0ecc54#mgmt#g' log.txt
-sed -i 's#cd378805-d73e-5681-8514-1d33e656c0e9#1/1#g' log.txt
-sed -i 's#e502e939-3ab8-5fee-8277-7fd1c1c0fa93#1/2#g' log.txt
-sed -i 's#780f6929-a863-5e6a-a046-3dac2e24bf58#1/1#g' log.txt
-sed -i 's#f1082088-a304-587b-a230-b8ce10e5a148#mgmt#g' log.txt
-sed -i 's#ffdfb0ce-1684-5d39-bad3-9ff1eb4ffbf8#1/2#g' log.txt
-sed -i 's#268b735d-c861-5319-88a4-2ea498f96a04#1/1#g' log.txt
-sed -i 's#62c0cba1-9ee8-5db5-82da-ce96d7e0f39f#1/3#g' log.txt
-sed -i 's#7d1bf45c-5ab2-525e-87a4-c0ddcd5c18e4#1/2#g' log.txt
-sed -i 's#2b11934b-dfd7-5267-87b9-7306a24e0182#1/1#g' log.txt
-sed -i 's#ca92338e-2038-5d74-8ef1-2b20a234a8b9#1/2#g' log.txt
-sed -i 's#f8955e74-4e93-5d43-a968-9626ee5c9b53#mgmt#g' log.txt
-sed -i 's#2b75d88d-095f-5752-a10a-1ff69df8008d#1/2#g' log.txt
-sed -i 's#bf0d75db-acf8-53cb-b6db-32d9dc0878c4#mgmt#g' log.txt
-sed -i 's#eeade85a-03df-55d2-bfc2-2af7267bbcf3#1/1#g' log.txt
-sed -i 's#06bb0b92-8783-5599-aa20-15bfbe241348#eth1#g' log.txt
-sed -i 's#6a6859c3-4a13-513c-a7dd-490c8b2931b1#eth2#g' log.txt
-sed -i 's#97f57787-cfec-5315-9718-7e850905f11a#int#g' log.txt
-sed -i 's#659c63c9-9197-54a2-af34-48275e736aac#192.168.27.140:8#g' log.txt
-sed -i 's#fed79944-3444-54ee-8335-efbe6590434b#192.168.27.139:10#g' log.txt
-sed -i 's#85bb83b0-8d96-5e76-9959-97c35036d4f9#mgmt#g' log.txt
-sed -i 's#313fb1ed-5dee-5e49-884a-cbb3b1e00073#1/2#g' log.txt
-sed -i 's#79699f56-df25-5188-a389-04606c24fbfc#1/1#g' log.txt
-sed -i 's#37ab67ef-0064-54e3-ae9b-d40100953834#int#g' log.txt
-sed -i 's#55e88b6b-ccf7-538f-a062-a41219292ea1#eth1#g' log.txt
-sed -i 's#68b5972b-3630-53a8-ba9b-cc54dd31f8b8#eth2#g' log.txt
-- 
GitLab


From 0b3afc61aa05a230c11885e4152153c7af6454b1 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 28 Feb 2023 19:10:44 +0000
Subject: [PATCH 182/229] Context component:

- Sort Service and Slice endpoints according to set request
---
 src/context/service/database/Service.py             | 1 +
 src/context/service/database/Slice.py               | 1 +
 src/context/service/database/models/ServiceModel.py | 9 +++++++--
 src/context/service/database/models/SliceModel.py   | 9 +++++++--
 4 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/context/service/database/Service.py b/src/context/service/database/Service.py
index a81a80c3c..fe12eaf8a 100644
--- a/src/context/service/database/Service.py
+++ b/src/context/service/database/Service.py
@@ -91,6 +91,7 @@ def service_set(db_engine : Engine, request : Service) -> Tuple[Dict, bool]:
         service_endpoints_data.append({
             'service_uuid' : service_uuid,
             'endpoint_uuid': endpoint_uuid,
+            'position'     : i,
         })
 
     constraints = compose_constraints_data(request.service_constraints, now, service_uuid=service_uuid)
diff --git a/src/context/service/database/Slice.py b/src/context/service/database/Slice.py
index 1d6781d53..724046bfa 100644
--- a/src/context/service/database/Slice.py
+++ b/src/context/service/database/Slice.py
@@ -91,6 +91,7 @@ def slice_set(db_engine : Engine, request : Slice) -> Tuple[Dict, bool]:
         slice_endpoints_data.append({
             'slice_uuid'   : slice_uuid,
             'endpoint_uuid': endpoint_uuid,
+            'position'     : i,
         })
 
     slice_services_data : List[Dict] = list()
diff --git a/src/context/service/database/models/ServiceModel.py b/src/context/service/database/models/ServiceModel.py
index 09ff381b5..f1781c4f8 100644
--- a/src/context/service/database/models/ServiceModel.py
+++ b/src/context/service/database/models/ServiceModel.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 import operator
-from sqlalchemy import Column, DateTime, Enum, ForeignKey, String
+from sqlalchemy import CheckConstraint, Column, DateTime, Enum, ForeignKey, Integer, String
 from sqlalchemy.dialects.postgresql import UUID
 from sqlalchemy.orm import relationship
 from typing import Dict
@@ -51,7 +51,7 @@ class ServiceModel(_Base):
             'service_status'      : {'service_status': self.service_status.value},
             'service_endpoint_ids': [
                 service_endpoint.endpoint.dump_id()
-                for service_endpoint in self.service_endpoints
+                for service_endpoint in sorted(self.service_endpoints, key=operator.attrgetter('position'))
             ],
             'service_constraints' : [
                 constraint.dump()
@@ -68,6 +68,11 @@ class ServiceEndPointModel(_Base):
 
     service_uuid  = Column(ForeignKey('service.service_uuid',   ondelete='CASCADE' ), primary_key=True)
     endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
+    position      = Column(Integer, nullable=False)
 
     service  = relationship('ServiceModel',  back_populates='service_endpoints', lazy='joined')
     endpoint = relationship('EndPointModel', lazy='joined') # back_populates='service_endpoints'
+
+    __table_args__ = (
+        CheckConstraint(position >= 0, name='check_position_value'),
+    )
diff --git a/src/context/service/database/models/SliceModel.py b/src/context/service/database/models/SliceModel.py
index 2d6c88416..7f1550eb2 100644
--- a/src/context/service/database/models/SliceModel.py
+++ b/src/context/service/database/models/SliceModel.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 import operator
-from sqlalchemy import Column, DateTime, Enum, ForeignKey, String
+from sqlalchemy import CheckConstraint, Column, DateTime, Enum, ForeignKey, Integer, String
 from sqlalchemy.dialects.postgresql import UUID
 from sqlalchemy.orm import relationship
 from typing import Dict
@@ -53,7 +53,7 @@ class SliceModel(_Base):
             'slice_status'      : {'slice_status': self.slice_status.value},
             'slice_endpoint_ids': [
                 slice_endpoint.endpoint.dump_id()
-                for slice_endpoint in self.slice_endpoints
+                for slice_endpoint in sorted(self.slice_endpoints, key=operator.attrgetter('position'))
             ],
             'slice_constraints' : [
                 constraint.dump()
@@ -82,10 +82,15 @@ class SliceEndPointModel(_Base):
 
     slice_uuid    = Column(ForeignKey('slice.slice_uuid',       ondelete='CASCADE' ), primary_key=True)
     endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
+    position      = Column(Integer, nullable=False)
 
     slice    = relationship('SliceModel', back_populates='slice_endpoints', lazy='joined')
     endpoint = relationship('EndPointModel', lazy='joined') # back_populates='slice_endpoints'
 
+    __table_args__ = (
+        CheckConstraint(position >= 0, name='check_position_value'),
+    )
+
 class SliceServiceModel(_Base):
     __tablename__ = 'slice_service'
 
-- 
GitLab


From d15ce17e8313541785cbe67af08c09ff585622cf Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 11:12:54 +0000
Subject: [PATCH 183/229] Device component:

- TransportAPI Driver: Updated input_sip/output_sip fields to input_sip_uuid/output_sip_uuid
- XR Driver: Updated input_sip/output_sip fields to input_sip_name/output_sip_name
---
 .../service/drivers/transport_api/TransportApiDriver.py       | 4 ++--
 src/device/service/drivers/xr/cm-cli.py                       | 4 ++--
 .../service/drivers/xr/cm/tests/test_xr_service_set_config.py | 4 ++--
 src/device/service/drivers/xr/cm/tf.py                        | 2 +-
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/device/service/drivers/transport_api/TransportApiDriver.py b/src/device/service/drivers/transport_api/TransportApiDriver.py
index 8b84274e0..1991a34d0 100644
--- a/src/device/service/drivers/transport_api/TransportApiDriver.py
+++ b/src/device/service/drivers/transport_api/TransportApiDriver.py
@@ -85,9 +85,9 @@ class TransportApiDriver(_Driver):
             for resource in resources:
                 LOGGER.info('resource = {:s}'.format(str(resource)))
 
-                input_sip = find_key(resource, 'input_sip')
-                output_sip = find_key(resource, 'output_sip')
                 uuid = find_key(resource, 'uuid')
+                input_sip = find_key(resource, 'input_sip_uuid')
+                output_sip = find_key(resource, 'output_sip_uuid')
                 capacity_value = find_key(resource, 'capacity_value')
                 capacity_unit = find_key(resource, 'capacity_unit')
                 layer_protocol_name = find_key(resource, 'layer_protocol_name')
diff --git a/src/device/service/drivers/xr/cm-cli.py b/src/device/service/drivers/xr/cm-cli.py
index 924ca0c96..14c6d24b6 100755
--- a/src/device/service/drivers/xr/cm-cli.py
+++ b/src/device/service/drivers/xr/cm-cli.py
@@ -160,8 +160,8 @@ if args.emulate_tf_set_config_service:
     hub_module_name, uuid, input_sip, output_sip, capacity_value  = eargs[0:5]
     capacity_value = int(capacity_value)
     config = {
-        "input_sip": input_sip,
-        "output_sip": output_sip,
+        "input_sip_name": input_sip,
+        "output_sip_name": output_sip,
         "capacity_value": capacity_value,
         "capacity_unit": "gigabit"
     }
diff --git a/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py b/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py
index e9b16b620..05f55d0df 100644
--- a/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py
+++ b/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py
@@ -44,8 +44,8 @@ def mock_cm():
 
 uuid = "12345ABCDEFGHIJKLMN"
 config = {
-    "input_sip": "XR HUB 1|XR-T4;",
-    "output_sip": "XR LEAF 1|XR-T1",
+    "input_sip_name": "XR HUB 1|XR-T4;",
+    "output_sip_name": "XR LEAF 1|XR-T1",
     "capacity_value": 125,
     "capacity_unit": "gigabit"
 }
diff --git a/src/device/service/drivers/xr/cm/tf.py b/src/device/service/drivers/xr/cm/tf.py
index c44cb0c9f..ace3cd288 100644
--- a/src/device/service/drivers/xr/cm/tf.py
+++ b/src/device/service/drivers/xr/cm/tf.py
@@ -38,7 +38,7 @@ def _get_capacity(config) -> int:
 
 def set_config_for_service(cm_connection: CmConnection, constellation: Constellation, uuid: str, config: Dict[str, any]) -> Union[bool, Exception]:
     try:
-        service = TFService(uuid, config["input_sip"], config["output_sip"], _get_capacity(config))
+        service = TFService(uuid, config["input_sip_name"], config["output_sip_name"], _get_capacity(config))
         if constellation.is_vti_mode():
             desired_tc = TransportCapacity(from_tf_service=service)
             active_tc = cm_connection.get_transport_capacity_by_name(service.name())
-- 
GitLab


From 3ae303ca2dbbbda82b814e374f1ba01322921d8d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 12:25:15 +0000
Subject: [PATCH 184/229] Service component:

- IETF L2VPN Service Handler: corrected endpoint conditions and selection
- TAPI Service Handler: corrected endpoint conditions and selection
- TAPI-XR Service Handler: separated from TAPI to prevent collisions in endpoint selection and config message composition
---
 .../service/service_handlers/__init__.py      |  13 +-
 .../L2NM_IETFL2VPN_ServiceHandler.py          |   6 +-
 .../tapi_tapi/TapiServiceHandler.py           |  14 +-
 .../tapi_xr/TapiXrServiceHandler.py           | 176 ++++++++++++++++++
 .../service_handlers/tapi_xr/__init__.py      |  14 ++
 5 files changed, 209 insertions(+), 14 deletions(-)
 create mode 100644 src/service/service/service_handlers/tapi_xr/TapiXrServiceHandler.py
 create mode 100644 src/service/service/service_handlers/tapi_xr/__init__.py

diff --git a/src/service/service/service_handlers/__init__.py b/src/service/service/service_handlers/__init__.py
index fa215af2f..257bc138f 100644
--- a/src/service/service/service_handlers/__init__.py
+++ b/src/service/service/service_handlers/__init__.py
@@ -15,13 +15,14 @@
 from common.proto.context_pb2 import DeviceDriverEnum, ServiceTypeEnum
 from ..service_handler_api.FilterFields import FilterFieldEnum
 from .l2nm_emulated.L2NMEmulatedServiceHandler import L2NMEmulatedServiceHandler
+from .l2nm_ietfl2vpn.L2NM_IETFL2VPN_ServiceHandler import L2NM_IETFL2VPN_ServiceHandler
 from .l2nm_openconfig.L2NMOpenConfigServiceHandler import L2NMOpenConfigServiceHandler
 from .l3nm_emulated.L3NMEmulatedServiceHandler import L3NMEmulatedServiceHandler
 from .l3nm_openconfig.L3NMOpenConfigServiceHandler import L3NMOpenConfigServiceHandler
+from .microwave.MicrowaveServiceHandler import MicrowaveServiceHandler
 from .p4.p4_service_handler import P4ServiceHandler
 from .tapi_tapi.TapiServiceHandler import TapiServiceHandler
-from .microwave.MicrowaveServiceHandler import MicrowaveServiceHandler
-from .l2nm_ietfl2vpn.L2NM_IETFL2VPN_ServiceHandler import L2NM_IETFL2VPN_ServiceHandler
+from .tapi_xr.TapiXrServiceHandler import TapiXrServiceHandler
 
 SERVICE_HANDLERS = [
     (L2NMEmulatedServiceHandler, [
@@ -51,7 +52,13 @@ SERVICE_HANDLERS = [
     (TapiServiceHandler, [
         {
             FilterFieldEnum.SERVICE_TYPE  : ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE,
-            FilterFieldEnum.DEVICE_DRIVER : [DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API, DeviceDriverEnum.DEVICEDRIVER_XR],
+            FilterFieldEnum.DEVICE_DRIVER : [DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API],
+        }
+    ]),
+    (TapiXrServiceHandler, [
+        {
+            FilterFieldEnum.SERVICE_TYPE  : ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE,
+            FilterFieldEnum.DEVICE_DRIVER : [DeviceDriverEnum.DEVICEDRIVER_XR],
         }
     ]),
     (MicrowaveServiceHandler, [
diff --git a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
index 9adc15494..880a6c5a2 100644
--- a/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
+++ b/src/service/service/service_handlers/l2nm_ietfl2vpn/L2NM_IETFL2VPN_ServiceHandler.py
@@ -42,7 +42,7 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
     ) -> List[Union[bool, Exception]]:
 
         chk_type('endpoints', endpoints, list)
-        if len(endpoints) != 2: return []
+        if len(endpoints) < 2: return []
 
         service_uuid = self.__service.service_id.service_uuid.uuid
         settings = self.__settings_handler.get('/settings')
@@ -57,7 +57,7 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
             src_endpoint = get_endpoint_matching(src_device, src_endpoint_uuid)
             src_controller = self.__task_executor.get_device_controller(src_device)
 
-            dst_device_uuid, dst_endpoint_uuid = get_device_endpoint_uuids(endpoints[1])
+            dst_device_uuid, dst_endpoint_uuid = get_device_endpoint_uuids(endpoints[-1])
             dst_device = self.__task_executor.get_device(DeviceId(**json_device_id(dst_device_uuid)))
             dst_endpoint = get_endpoint_matching(dst_device, dst_endpoint_uuid)
             dst_controller = self.__task_executor.get_device_controller(dst_device)
@@ -91,7 +91,7 @@ class L2NM_IETFL2VPN_ServiceHandler(_ServiceHandler):
     ) -> List[Union[bool, Exception]]:
 
         chk_type('endpoints', endpoints, list)
-        if len(endpoints) != 2: return []
+        if len(endpoints) < 2: return []
 
         service_uuid = self.__service.service_id.service_uuid.uuid
 
diff --git a/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py b/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py
index ee9c4a66d..af7d4bc94 100644
--- a/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py
+++ b/src/service/service/service_handlers/tapi_tapi/TapiServiceHandler.py
@@ -19,7 +19,7 @@ from common.proto.context_pb2 import ConfigRule, DeviceId, Service
 from common.tools.object_factory.ConfigRule import json_config_rule_delete, json_config_rule_set
 from common.tools.object_factory.Device import json_device_id
 from common.type_checkers.Checkers import chk_type
-from service.service.service_handler_api.Tools import get_device_endpoint_uuids, get_endpoint_matching
+from service.service.service_handler_api.Tools import get_device_endpoint_uuids
 from service.service.service_handler_api._ServiceHandler import _ServiceHandler
 from service.service.service_handler_api.SettingsHandler import SettingsHandler
 from service.service.task_scheduler.TaskExecutor import TaskExecutor
@@ -42,7 +42,7 @@ class TapiServiceHandler(_ServiceHandler):
     ) -> List[Union[bool, Exception]]:
 
         chk_type('endpoints', endpoints, list)
-        if len(endpoints) != 2: return []
+        if len(endpoints) < 2: return []
 
         service_uuid = self.__service.service_id.service_uuid.uuid
         settings = self.__settings_handler.get('/settings')
@@ -57,13 +57,11 @@ class TapiServiceHandler(_ServiceHandler):
         try:
             src_device_uuid, src_endpoint_uuid = get_device_endpoint_uuids(endpoints[0])
             src_device = self.__task_executor.get_device(DeviceId(**json_device_id(src_device_uuid)))
-            src_endpoint = get_endpoint_matching(src_device, src_endpoint_uuid)
             src_controller = self.__task_executor.get_device_controller(src_device)
             if src_controller is None: src_controller = src_device
 
-            dst_device_uuid, dst_endpoint_uuid = get_device_endpoint_uuids(endpoints[1])
+            dst_device_uuid, dst_endpoint_uuid = get_device_endpoint_uuids(endpoints[-1])
             dst_device = self.__task_executor.get_device(DeviceId(**json_device_id(dst_device_uuid)))
-            dst_endpoint = get_endpoint_matching(dst_device, dst_endpoint_uuid)
             dst_controller = self.__task_executor.get_device_controller(dst_device)
             if dst_controller is None: dst_controller = dst_device
 
@@ -73,8 +71,8 @@ class TapiServiceHandler(_ServiceHandler):
 
             json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
                 'uuid'                    : service_uuid,
-                'input_sip'               : src_endpoint.name,
-                'output_sip'              : dst_endpoint.name,
+                'input_sip_uuid'          : src_endpoint_uuid,
+                'output_sip_uuid'         : dst_endpoint_uuid,
                 'capacity_unit'           : capacity_unit,
                 'capacity_value'          : capacity_value,
                 'layer_protocol_name'     : layer_proto_name,
@@ -97,7 +95,7 @@ class TapiServiceHandler(_ServiceHandler):
     ) -> List[Union[bool, Exception]]:
 
         chk_type('endpoints', endpoints, list)
-        if len(endpoints) != 2: return []
+        if len(endpoints) < 2: return []
 
         service_uuid = self.__service.service_id.service_uuid.uuid
 
diff --git a/src/service/service/service_handlers/tapi_xr/TapiXrServiceHandler.py b/src/service/service/service_handlers/tapi_xr/TapiXrServiceHandler.py
new file mode 100644
index 000000000..a1e1b8a6f
--- /dev/null
+++ b/src/service/service/service_handlers/tapi_xr/TapiXrServiceHandler.py
@@ -0,0 +1,176 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import json, logging
+from typing import Any, Dict, List, Optional, Tuple, Union
+from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
+from common.proto.context_pb2 import ConfigRule, DeviceId, Service
+from common.tools.object_factory.ConfigRule import json_config_rule_delete, json_config_rule_set
+from common.tools.object_factory.Device import json_device_id
+from common.type_checkers.Checkers import chk_type
+from service.service.service_handler_api.Tools import get_device_endpoint_uuids, get_endpoint_matching
+from service.service.service_handler_api._ServiceHandler import _ServiceHandler
+from service.service.service_handler_api.SettingsHandler import SettingsHandler
+from service.service.task_scheduler.TaskExecutor import TaskExecutor
+
+LOGGER = logging.getLogger(__name__)
+
+METRICS_POOL = MetricsPool('Service', 'Handler', labels={'handler': 'tapi_xr'})
+
+class TapiXrServiceHandler(_ServiceHandler):
+    def __init__(   # pylint: disable=super-init-not-called
+        self, service : Service, task_executor : TaskExecutor, **settings
+    ) -> None:
+        self.__service = service
+        self.__task_executor = task_executor
+        self.__settings_handler = SettingsHandler(service.service_config, **settings)
+
+    @metered_subclass_method(METRICS_POOL)
+    def SetEndpoint(
+        self, endpoints : List[Tuple[str, str, Optional[str]]], connection_uuid : Optional[str] = None
+    ) -> List[Union[bool, Exception]]:
+
+        chk_type('endpoints', endpoints, list)
+        if len(endpoints) != 4: return []
+
+        service_uuid = self.__service.service_id.service_uuid.uuid
+        settings = self.__settings_handler.get('/settings')
+        json_settings : Dict = {} if settings is None else settings.value
+        capacity_value   = json_settings.get('capacity_value', 50.0)
+        capacity_unit    = json_settings.get('capacity_unit',  'GHz')
+
+        results = []
+        try:
+            src_device_uuid, src_endpoint_uuid = get_device_endpoint_uuids(endpoints[1])
+            src_device = self.__task_executor.get_device(DeviceId(**json_device_id(src_device_uuid)))
+            src_endpoint = get_endpoint_matching(src_device, src_endpoint_uuid)
+            src_controller = self.__task_executor.get_device_controller(src_device)
+            if src_controller is None: src_controller = src_device
+
+            dst_device_uuid, dst_endpoint_uuid = get_device_endpoint_uuids(endpoints[2])
+            dst_device = self.__task_executor.get_device(DeviceId(**json_device_id(dst_device_uuid)))
+            dst_endpoint = get_endpoint_matching(dst_device, dst_endpoint_uuid)
+            dst_controller = self.__task_executor.get_device_controller(dst_device)
+            if dst_controller is None: dst_controller = dst_device
+
+            if src_controller.device_id.device_uuid.uuid != dst_controller.device_id.device_uuid.uuid:
+                raise Exception('Different Src-Dst devices not supported by now')
+            controller = src_controller
+
+            json_config_rule = json_config_rule_set('/services/service[{:s}]'.format(service_uuid), {
+                'uuid'           : service_uuid,
+                'input_sip_name' : '|'.join([src_device.name, src_endpoint.name]),
+                'output_sip_name': '|'.join([dst_device.name, dst_endpoint.name]),
+                'capacity_unit'  : capacity_unit,
+                'capacity_value' : capacity_value,
+            })
+
+            del controller.device_config.config_rules[:]
+            controller.device_config.config_rules.append(ConfigRule(**json_config_rule))
+            self.__task_executor.configure_device(controller)
+            results.append(True)
+        except Exception as e: # pylint: disable=broad-except
+            LOGGER.exception('Unable to SetEndpoint for Service({:s})'.format(str(service_uuid)))
+            results.append(e)
+
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def DeleteEndpoint(
+        self, endpoints : List[Tuple[str, str, Optional[str]]], connection_uuid : Optional[str] = None
+    ) -> List[Union[bool, Exception]]:
+
+        chk_type('endpoints', endpoints, list)
+        if len(endpoints) < 2: return []
+
+        service_uuid = self.__service.service_id.service_uuid.uuid
+
+        results = []
+        try:
+            src_device_uuid, _ = get_device_endpoint_uuids(endpoints[0])
+            src_device = self.__task_executor.get_device(DeviceId(**json_device_id(src_device_uuid)))
+            src_controller = self.__task_executor.get_device_controller(src_device)
+            if src_controller is None: src_controller = src_device
+
+            dst_device_uuid, _ = get_device_endpoint_uuids(endpoints[1])
+            dst_device = self.__task_executor.get_device(DeviceId(**json_device_id(dst_device_uuid)))
+            dst_controller = self.__task_executor.get_device_controller(dst_device)
+            if dst_controller is None: dst_controller = dst_device
+
+            if src_controller.device_id.device_uuid.uuid != dst_controller.device_id.device_uuid.uuid:
+                raise Exception('Different Src-Dst devices not supported by now')
+            controller = src_controller
+
+            json_config_rule = json_config_rule_delete('/services/service[{:s}]'.format(service_uuid), {
+                'uuid': service_uuid
+            })
+            del controller.device_config.config_rules[:]
+            controller.device_config.config_rules.append(ConfigRule(**json_config_rule))
+            self.__task_executor.configure_device(controller)
+            results.append(True)
+        except Exception as e: # pylint: disable=broad-except
+            LOGGER.exception('Unable to DeleteEndpoint for Service({:s})'.format(str(service_uuid)))
+            results.append(e)
+
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def SetConstraint(self, constraints : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('constraints', constraints, list)
+        if len(constraints) == 0: return []
+
+        msg = '[SetConstraint] Method not implemented. Constraints({:s}) are being ignored.'
+        LOGGER.warning(msg.format(str(constraints)))
+        return [True for _ in range(len(constraints))]
+
+    @metered_subclass_method(METRICS_POOL)
+    def DeleteConstraint(self, constraints : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('constraints', constraints, list)
+        if len(constraints) == 0: return []
+
+        msg = '[DeleteConstraint] Method not implemented. Constraints({:s}) are being ignored.'
+        LOGGER.warning(msg.format(str(constraints)))
+        return [True for _ in range(len(constraints))]
+
+    @metered_subclass_method(METRICS_POOL)
+    def SetConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('resources', resources, list)
+        if len(resources) == 0: return []
+
+        results = []
+        for resource in resources:
+            try:
+                resource_value = json.loads(resource[1])
+                self.__settings_handler.set(resource[0], resource_value)
+                results.append(True)
+            except Exception as e: # pylint: disable=broad-except
+                LOGGER.exception('Unable to SetConfig({:s})'.format(str(resource)))
+                results.append(e)
+
+        return results
+
+    @metered_subclass_method(METRICS_POOL)
+    def DeleteConfig(self, resources : List[Tuple[str, Any]]) -> List[Union[bool, Exception]]:
+        chk_type('resources', resources, list)
+        if len(resources) == 0: return []
+
+        results = []
+        for resource in resources:
+            try:
+                self.__settings_handler.delete(resource[0])
+            except Exception as e: # pylint: disable=broad-except
+                LOGGER.exception('Unable to DeleteConfig({:s})'.format(str(resource)))
+                results.append(e)
+
+        return results
diff --git a/src/service/service/service_handlers/tapi_xr/__init__.py b/src/service/service/service_handlers/tapi_xr/__init__.py
new file mode 100644
index 000000000..1549d9811
--- /dev/null
+++ b/src/service/service/service_handlers/tapi_xr/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
-- 
GitLab


From c796e0bcf39eb9f57af3d7cd4aeb171241ac797a Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 12:26:18 +0000
Subject: [PATCH 185/229] Device component:

- Added setting to control how underlying topology should be imported
- Extended XR Driver to enable topology import selection
---
 .../service/driver_api/ImportTopologyEnum.py  | 37 ++++++++
 src/device/service/drivers/xr/XrDriver.py     | 95 +++++++++++--------
 2 files changed, 92 insertions(+), 40 deletions(-)
 create mode 100644 src/device/service/driver_api/ImportTopologyEnum.py

diff --git a/src/device/service/driver_api/ImportTopologyEnum.py b/src/device/service/driver_api/ImportTopologyEnum.py
new file mode 100644
index 000000000..06f0ff9c2
--- /dev/null
+++ b/src/device/service/driver_api/ImportTopologyEnum.py
@@ -0,0 +1,37 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 enum import Enum
+from typing import Dict
+
+class ImportTopologyEnum(Enum):
+    # While importing underlying resources, the driver just imports endpoints and exposes them directly.
+    DISABLED = 'disabled'
+
+    # While importing underlying resources, the driver just imports imports sub-devices but not links
+    # connecting them. The endpoints are exposed in virtual nodes representing the sub-devices.
+    # (a remotely-controlled transport domain might exist between nodes)
+    DEVICES = 'devices'
+
+    # While importing underlying resources, the driver just imports imports sub-devices and links
+    # connecting them. The endpoints are exposed in virtual nodes representing the sub-devices.
+    # (enables to define constrained connectivity between the sub-devices)
+    TOPOLOGY = 'topology'
+
+def get_import_topology(settings : Dict, default : ImportTopologyEnum = ImportTopologyEnum.DISABLED):
+    str_import_topology = settings.get('import_topology')
+    if str_import_topology is None: return default
+    import_topology = ImportTopologyEnum._value2member_map_.get(str_import_topology) # pylint: disable=no-member
+    if import_topology is None: raise Exception('Unexpected setting value')
+    return import_topology
diff --git a/src/device/service/drivers/xr/XrDriver.py b/src/device/service/drivers/xr/XrDriver.py
index 83ffd5218..2b53de8e7 100644
--- a/src/device/service/drivers/xr/XrDriver.py
+++ b/src/device/service/drivers/xr/XrDriver.py
@@ -22,6 +22,7 @@ from common.DeviceTypes import DeviceTypeEnum
 from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
 from common.proto.context_pb2 import DeviceDriverEnum, DeviceOperationalStatusEnum
 from common.type_checkers.Checkers import chk_type
+from device.service.driver_api.ImportTopologyEnum import ImportTopologyEnum, get_import_topology
 from device.service.driver_api._Driver import _Driver
 from .cm.cm_connection import CmConnection, ConsistencyMode
 from .cm import tf
@@ -48,6 +49,14 @@ class XrDriver(_Driver):
         username = settings.get("username", "xr-user-1")
         password = settings.get("password", "xr-user-1")
         
+        # Options are:
+        #    disabled --> just import endpoints as usual
+        #    devices  --> imports sub-devices but not links connecting them.
+        #                 (a remotely-controlled transport domain might exist between them)
+        #    topology --> imports sub-devices and links connecting them.
+        #                 (not supported by XR driver)
+        self.__import_topology = get_import_topology(settings, default=ImportTopologyEnum.DISABLED)
+
         # Options are:
         #    asynchronous --> operation considered complete when IPM responds with suitable status code,
         #                     including "accepted", that only means request is semantically good and queued.
@@ -100,50 +109,56 @@ class XrDriver(_Driver):
             constellation = self.__cm_connection.get_constellation_by_hub_name(self.__hub_module_name)
             if constellation:
                 self.__constellation = constellation
-                #return [(f"/endpoints/endpoint[{ifname}]", {'uuid': ifname, 'type': 'optical', 'sample_types': {}}) for ifname in constellation.ifnames()]
-
-                devices : Set[str] = set()
-                pluggables : Set[str] = set()
-                devices_and_endpoints = []
-                for ifname in constellation.ifnames():
-                    device_name,pluggable_name = ifname.split('|')
-
-                    if device_name not in devices:
-                        device_url = '/devices/device[{:s}]'.format(device_name)
-                        device_data = {
-                            'uuid': device_name, 'name': device_name,
-                            'type': DeviceTypeEnum.EMULATED_PACKET_ROUTER.value,
-                            'status': DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED,
-                            'drivers': [DeviceDriverEnum.DEVICEDRIVER_UNDEFINED],
-                        }
-                        devices_and_endpoints.append((device_url, device_data))
-
-                        for copper_if_index in range(4):
-                            copper_ifname = '1/{:d}'.format(copper_if_index + 1)
-                            endpoint_url = '/endpoints/endpoint[{:s}]'.format(copper_ifname)
+                if self.__import_topology == ImportTopologyEnum.DISABLED:
+                    return [
+                        (f"/endpoints/endpoint[{ifname}]", {'uuid': ifname, 'type': 'optical', 'sample_types': {}})
+                        for ifname in constellation.ifnames()
+                    ]
+                elif self.__import_topology == ImportTopologyEnum.DEVICES:
+                    devices : Set[str] = set()
+                    pluggables : Set[str] = set()
+                    devices_and_endpoints = []
+                    for ifname in constellation.ifnames():
+                        device_name,pluggable_name = ifname.split('|')
+
+                        if device_name not in devices:
+                            device_url = '/devices/device[{:s}]'.format(device_name)
+                            device_data = {
+                                'uuid': device_name, 'name': device_name,
+                                'type': DeviceTypeEnum.EMULATED_PACKET_ROUTER.value,
+                                'status': DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED,
+                                'drivers': [DeviceDriverEnum.DEVICEDRIVER_UNDEFINED],
+                            }
+                            devices_and_endpoints.append((device_url, device_data))
+
+                            for copper_if_index in range(4):
+                                copper_ifname = '1/{:d}'.format(copper_if_index + 1)
+                                endpoint_url = '/endpoints/endpoint[{:s}]'.format(copper_ifname)
+                                endpoint_data = {
+                                    'device_uuid': device_name, 'uuid': copper_ifname, 'name': copper_ifname,
+                                    'type': 'copper/internal', 'sample_types': {}
+                                }
+                                devices_and_endpoints.append((endpoint_url, endpoint_data))
+
+                            devices.add(device_name)
+
+                        if ifname not in pluggables:
+                            endpoint_url = '/endpoints/endpoint[{:s}]'.format(ifname)
+                            if 'hub' in ifname.lower():
+                                endpoint_type = 'optical/xr-hub'
+                            elif 'leaf' in ifname.lower():
+                                endpoint_type = 'optical/xr-leaf'
+                            else:
+                                endpoint_type = 'optical/xr'
                             endpoint_data = {
-                                'device_uuid': device_name, 'uuid': copper_ifname, 'name': copper_ifname,
-                                'type': 'copper/internal', 'sample_types': {}
+                                'device_uuid': device_name, 'uuid': pluggable_name, 'name': pluggable_name,
+                                'type': endpoint_type, 'sample_types': {}
                             }
                             devices_and_endpoints.append((endpoint_url, endpoint_data))
 
-                        devices.add(device_name)
-
-                    if ifname not in pluggables:
-                        endpoint_url = '/endpoints/endpoint[{:s}]'.format(ifname)
-                        if 'hub' in ifname.lower():
-                            endpoint_type = 'optical/xr-hub'
-                        elif 'leaf' in ifname.lower():
-                            endpoint_type = 'optical/xr-leaf'
-                        else:
-                            endpoint_type = 'optical/xr'
-                        endpoint_data = {
-                            'device_uuid': device_name, 'uuid': pluggable_name, 'name': pluggable_name,
-                            'type': endpoint_type, 'sample_types': {}
-                        }
-                        devices_and_endpoints.append((endpoint_url, endpoint_data))
-
-                return devices_and_endpoints
+                    return devices_and_endpoints
+                else:
+                    raise Exception('Unsupported import_topology mode: {:s}'.format(str(self.__import_topology)))
             else:
                 return []
 
-- 
GitLab


From 8ee31f1f1ec94faff3b637ab40ca26281bb2464a Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 12:27:00 +0000
Subject: [PATCH 186/229] OFC'23 demo:

- Extended child descriptor with full-mesh topology
- Extended parent descriptor with import topology setting for XR
---
 .../ofc23/descriptors/descriptor_child.json   | 104 +++++++++++++++++-
 .../ofc23/descriptors/descriptor_parent.json  |   2 +-
 2 files changed, 100 insertions(+), 6 deletions(-)

diff --git a/src/tests/ofc23/descriptors/descriptor_child.json b/src/tests/ofc23/descriptors/descriptor_child.json
index a167441f4..1dc6fd355 100644
--- a/src/tests/ofc23/descriptors/descriptor_child.json
+++ b/src/tests/ofc23/descriptors/descriptor_child.json
@@ -13,7 +13,11 @@
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
                     {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/3"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/4"}
                 ]}}}
             ]}
         },
@@ -24,7 +28,11 @@
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
                     {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/3"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/4"}
                 ]}}}
             ]}
         },
@@ -35,7 +43,11 @@
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
                     {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/3"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/4"}
                 ]}}}
             ]}
         },
@@ -46,10 +58,92 @@
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
                     {"sample_types": [], "type": "copper/internal", "uuid": "1/1"},
-                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"}
+                    {"sample_types": [], "type": "copper/internal", "uuid": "1/2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/3"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "2/4"}
                 ]}}}
             ]}
         }
     ],
-    "links": []
+    "links": [
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE1/2/2==PE2/2/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "2/2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "2/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE1/2/3==PE3/2/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "2/3"}},
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "2/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE1/2/4==PE4/2/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "2/4"}},
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "2/1"}}
+            ]
+        },
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE2/2/1==PE1/2/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "2/1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "2/2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE2/2/3==PE3/2/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "2/3"}},
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "2/2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE2/2/4==PE4/2/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "2/4"}},
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "2/2"}}
+            ]
+        },
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE3/2/1==PE1/2/3"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "2/1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "2/3"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE3/2/2==PE2/2/3"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "2/2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "2/3"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE4/2/2==PE2/2/4"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "2/2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "2/4"}}
+            ]
+        },
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE4/2/1==PE1/2/4"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "2/1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "2/4"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE4/2/2==PE2/2/4"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "2/2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "2/4"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE4/2/3==PE3/2/4"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "2/3"}},
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "2/4"}}
+            ]
+        }
+
+    ]
 }
diff --git a/src/tests/ofc23/descriptors/descriptor_parent.json b/src/tests/ofc23/descriptors/descriptor_parent.json
index acf98c574..413b75662 100644
--- a/src/tests/ofc23/descriptors/descriptor_parent.json
+++ b/src/tests/ofc23/descriptors/descriptor_parent.json
@@ -53,7 +53,7 @@
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8444"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "xr-user-1", "password": "xr-user-1", "hub_module_name": "OFC HUB 1",
-                    "consistency-mode": "lifecycle"
+                    "consistency-mode": "lifecycle", "import_topology": "devices"
                 }}}
             ]}
         },
-- 
GitLab


From ffb2d6f467c92e07fd463ca8a11d834eca944b5d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 12:27:30 +0000
Subject: [PATCH 187/229] Test - Tools - IPM Mock Controller:

- First basic and functional version
---
 .../tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py | 151 ++++++++++++------
 1 file changed, 106 insertions(+), 45 deletions(-)

diff --git a/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py b/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py
index 52a85a00d..ecac81be7 100644
--- a/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py
+++ b/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py
@@ -15,6 +15,7 @@
 # Mock IPM controller (implements minimal support)
 
 import functools, json, logging, sys, time, uuid
+from typing import Any, Dict, Optional, Tuple
 from flask import Flask, jsonify, make_response, request
 from flask_restful import Api, Resource
 
@@ -28,21 +29,57 @@ LOG_LEVEL    = logging.DEBUG
 CONSTELLATION = {
     'id': 'ofc-constellation',
     'hubModule': {'state': {
-        'module': {'moduleName': 'OFC HUB 1', 'trafficMode': 'L1Mode'},
+        'module': {'moduleName': 'OFC HUB 1', 'trafficMode': 'L1Mode', 'capacity': 100},
         'endpoints': [{'moduleIf': {'clientIfAid': 'XR-T1'}}, {'moduleIf': {'clientIfAid': 'XR-T4'}}]
     }},
     'leafModules': [
         {'state': {
-            'module': {'moduleName': 'OFC LEAF 1', 'trafficMode': 'L1Mode'},
+            'module': {'moduleName': 'OFC LEAF 1', 'trafficMode': 'L1Mode', 'capacity': 100},
             'endpoints': [{'moduleIf': {'clientIfAid': 'XR-T1'}}]
         }},
         {'state': {
-            'module': {'moduleName': 'OFC LEAF 2', 'trafficMode': 'L1Mode'},
+            'module': {'moduleName': 'OFC LEAF 2', 'trafficMode': 'L1Mode', 'capacity': 100},
             'endpoints': [{'moduleIf': {'clientIfAid': 'XR-T1'}}]
         }}
     ]
 }
 
+CONNECTIONS : Dict[str, Any] = dict()
+STATE_NAME_TO_CONNECTION : Dict[str, str] = dict()
+
+def select_module_state(module_name : str) -> Optional[Dict]:
+    hub_module_state = CONSTELLATION.get('hubModule', {}).get('state', {})
+    if module_name == hub_module_state.get('module', {}).get('moduleName'): return hub_module_state
+    for leaf_module in CONSTELLATION.get('leafModules', []):
+        leaf_module_state = leaf_module.get('state', {})
+        if module_name == leaf_module_state.get('module', {}).get('moduleName'): return leaf_module_state
+    return None
+
+def select_endpoint(module_state : Dict, module_if : str) -> Optional[Dict]:
+    for endpoint in module_state.get('endpoints', []):
+        if module_if == endpoint.get('moduleIf', {}).get('clientIfAid'): return endpoint
+    return None
+
+def select_module_endpoint(selector : Dict) -> Optional[Tuple[Dict, Dict]]:
+    selected_module_name = selector['moduleIfSelectorByModuleName']['moduleName']
+    selected_module_if = selector['moduleIfSelectorByModuleName']['moduleClientIfAid']
+    module_state = select_module_state(selected_module_name)
+    if module_state is None: return None
+    return module_state, select_endpoint(module_state, selected_module_if)
+
+def compose_endpoint(endpoint_selector : Dict) -> Dict:
+   module, endpoint = select_module_endpoint(endpoint_selector['selector'])
+   return {
+       'href': '/' + str(uuid.uuid4()),
+       'state': {
+            'moduleIf': {
+                'moduleName': module['module']['moduleName'],
+                'clientIfAid': endpoint['moduleIf']['clientIfAid'],
+            },
+            'capacity': module['module']['capacity'],
+        }
+    }
+
 logging.basicConfig(level=LOG_LEVEL, format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s")
 LOGGER = logging.getLogger(__name__)
 
@@ -53,59 +90,85 @@ def log_request(logger : logging.Logger, response):
     logger.info('%s %s %s %s %s', timestamp, request.remote_addr, request.method, request.full_path, response.status)
     return response
 
-#class Health(Resource):
-#    def get(self):
-#        return make_response(jsonify({}), 200)
-
 class OpenIdConnect(Resource):
     ACCESS_TOKENS = {}
 
     def post(self):
         if request.content_type != 'application/x-www-form-urlencoded': return make_response('bad content type', 400)
         if request.content_length == 0: return make_response('bad content length', 400)
-        form_request = request.form
-        if form_request.get('client_id') != 'xr-web-client': return make_response('bad client_id', 403)
-        if form_request.get('client_secret') != 'xr-web-client': return make_response('bad client_secret', 403)
-        if form_request.get('grant_type') != 'password': return make_response('bad grant_type', 403)
-        if form_request.get('username') != IPM_USERNAME: return make_response('bad username', 403)
-        if form_request.get('password') != IPM_PASSWORD: return make_response('bad password', 403)
+        request_form = request.form
+        if request_form.get('client_id') != 'xr-web-client': return make_response('bad client_id', 403)
+        if request_form.get('client_secret') != 'xr-web-client': return make_response('bad client_secret', 403)
+        if request_form.get('grant_type') != 'password': return make_response('bad grant_type', 403)
+        if request_form.get('username') != IPM_USERNAME: return make_response('bad username', 403)
+        if request_form.get('password') != IPM_PASSWORD: return make_response('bad password', 403)
         access_token = OpenIdConnect.ACCESS_TOKENS.setdefault(IPM_USERNAME, uuid.uuid4())
         reply = {'access_token': access_token, 'expires_in': 86400}
         return make_response(jsonify(reply), 200)
 
 class XrNetworks(Resource):
     def get(self):
-        print(str(request.args))
-        content = request.args.get('content')
-        print('content', content)
         query = json.loads(request.args.get('q'))
         hub_module_name = query.get('hubModule.state.module.moduleName')
         if hub_module_name != 'OFC HUB 1': return make_response('unexpected hub module', 404)
-        print('query', query)
         return make_response(jsonify([CONSTELLATION]), 200)
 
-#class Services(Resource):
-#    def get(self):
-#        services = [service for service in NETWORK_SERVICES.values()]
-#        return make_response(jsonify({'ietf-eth-tran-service:etht-svc': {'etht-svc-instances': services}}), 200)
-#
-#    def post(self):
-#        json_request = request.get_json()
-#        if not json_request: abort(400)
-#        if not isinstance(json_request, dict): abort(400)
-#        if 'etht-svc-instances' not in json_request: abort(400)
-#        json_services = json_request['etht-svc-instances']
-#        if not isinstance(json_services, list): abort(400)
-#        if len(json_services) != 1: abort(400)
-#        svc_data = json_services[0]
-#        etht_svc_name = svc_data['etht-svc-name']
-#        NETWORK_SERVICES[etht_svc_name] = svc_data
-#        return make_response(jsonify({}), 201)
-
-#class DelServices(Resource):
-#    def delete(self, service_uuid : str):
-#        NETWORK_SERVICES.pop(service_uuid, None)
-#        return make_response(jsonify({}), 204)
+class XrNetworkConnections(Resource):
+    def get(self):
+        query = json.loads(request.args.get('q'))
+        state_name = query.get('state.name')
+        if state_name is None:
+            connections = [connection for connection in CONNECTIONS.values()]
+        else:
+            connection_uuid = STATE_NAME_TO_CONNECTION.get(state_name)
+            if connection_uuid is None: return make_response('state name not found', 404)
+            connection = CONNECTIONS.get(connection_uuid)
+            if connection is None: return make_response('connection for state name not found', 404)
+            connections = [connection]
+        return make_response(jsonify(connections), 200)
+
+    def post(self):
+        if request.content_type != 'application/json': return make_response('bad content type', 400)
+        if request.content_length == 0: return make_response('bad content length', 400)
+        request_json = request.json
+        if not isinstance(request_json, list): return make_response('content is not list', 400)
+        reply = []
+        for connection in request_json:
+            connection_uuid = str(uuid.uuid4())
+            state_name = connection['name']
+
+            if state_name is not None: STATE_NAME_TO_CONNECTION[state_name] = connection_uuid
+            CONNECTIONS[connection_uuid] = {
+                'href': '/network-connections/{:s}'.format(str(connection_uuid)),
+                'config': {
+                    'implicitTransportCapacity': connection['implicitTransportCapacity']
+                    # 'mc': ??
+                },
+                'state': {
+                    'name': state_name,
+                    'serviceMode': connection['serviceMode']
+                    # 'outerVID' : ??
+                },
+                'endpoints': [
+                    compose_endpoint(endpoint)
+                    for endpoint in connection['endpoints']
+                ]
+            }
+            reply.append(CONNECTIONS[connection_uuid])
+        return make_response(jsonify(reply), 202)
+
+class XrNetworkConnection(Resource):
+    def get(self, connection_uuid : str):
+        connection = CONNECTIONS.get(connection_uuid)
+        if connection is None: return make_response('unexpected connection id', 404)
+        return make_response(jsonify(connection), 200)
+
+    def delete(self, connection_uuid : str):
+        connection = CONNECTIONS.pop(connection_uuid, None)
+        if connection is None: return make_response('unexpected connection id', 404)
+        state_name = connection['state']['name']
+        STATE_NAME_TO_CONNECTION.pop(state_name, None)
+        return make_response(jsonify({}), 202)
 
 def main():
     LOGGER.info('Starting...')
@@ -114,12 +177,10 @@ def main():
     app.after_request(functools.partial(log_request, LOGGER))
 
     api = Api(app)
-    #api.add_resource(Health,      '/ietf-network:networks')
-    api.add_resource(OpenIdConnect, '/realms/xr-cm/protocol/openid-connect/token')
-    api.add_resource(XrNetworks,    '/api/v1/xr-networks')
-    #api.add_resource(Network,     '/ietf-network:networks/network=<string:network_uuid>')
-    #api.add_resource(Services,    '/ietf-eth-tran-service:etht-svc')
-    #api.add_resource(DelServices, '/ietf-eth-tran-service:etht-svc/etht-svc-instances=<string:service_uuid>')
+    api.add_resource(OpenIdConnect,        '/realms/xr-cm/protocol/openid-connect/token')
+    api.add_resource(XrNetworks,           '/api/v1/xr-networks')
+    api.add_resource(XrNetworkConnections, '/api/v1/network-connections')
+    api.add_resource(XrNetworkConnection,  '/api/v1/network-connections/<string:connection_uuid>')
 
     LOGGER.info('Listening on {:s}...'.format(str(STR_ENDPOINT)))
     app.run(debug=True, host=BIND_ADDRESS, port=BIND_PORT, ssl_context='adhoc')
-- 
GitLab


From db28faaae7d821f0222b84db49f942f065c35020 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 12:27:37 +0000
Subject: [PATCH 188/229] Remove TODO file

---
 TODO.txt | 22 ----------------------
 1 file changed, 22 deletions(-)
 delete mode 100644 TODO.txt

diff --git a/TODO.txt b/TODO.txt
deleted file mode 100644
index 0e6b21c61..000000000
--- a/TODO.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-PENDING:
-- no rule is composed for IPM controller
-- no rule is composed for L2VPN TFS SBI
-- pending infinera tests
-- test with Slice NBI
-- integrate Slice NBI in Load Gen
-- sort endpoints in service and slice as done for links
-
-ONGOING:
-- implement mock IPM controller
-
-TO TEST:
-
-
-OPTIONAL:
-    - Optimize requests pathcomp--context
-    - Optimize requests webui--context
-    - TransportAPIDriver: add flag to import underlying topology options: 'disabled/devices/all'
-    - IetfL2VpnDriver: add flag to import underlying topology options: 'disabled/devices/all'
-    - MWDriver should import topology, there should be nothing between antennas
-    - Enable to create links (connectivity between subdevices)
-    - bidirectional links should be duplicated by frontend in a smart way
-- 
GitLab


From 580817c79ecc3751164f6564d7e980a433db976c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 13:35:27 +0000
Subject: [PATCH 189/229] Deploy scripts:

- Added definition of external ports
- Added definition of NATS namespace
- Improved Grafana configuration
- Improved deployment of dependencies
- Updated my_deploy.sh script
---
 deploy/all.sh  | 21 +++++++++++++++++++
 deploy/crdb.sh | 57 ++++++++++++++++++++++++++++++--------------------
 deploy/nats.sh | 36 ++++++++++++++++++-------------
 deploy/qdb.sh  | 40 ++++++++++++++++++++++-------------
 deploy/tfs.sh  | 31 ++++++++++++++++++++++++---
 my_deploy.sh   | 21 +++++++++++++++++++
 6 files changed, 151 insertions(+), 55 deletions(-)

diff --git a/deploy/all.sh b/deploy/all.sh
index 6f5592cb4..6f8331b76 100755
--- a/deploy/all.sh
+++ b/deploy/all.sh
@@ -51,6 +51,12 @@ export TFS_SKIP_BUILD=${TFS_SKIP_BUILD:-""}
 # If not already set, set the namespace where CockroackDB will be deployed.
 export CRDB_NAMESPACE=${CRDB_NAMESPACE:-"crdb"}
 
+# If not already set, set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL=${CRDB_EXT_PORT_SQL:-"26257"}
+
+# If not already set, set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP=${CRDB_EXT_PORT_HTTP:-"8081"}
+
 # If not already set, set the database username to be used by Context.
 export CRDB_USERNAME=${CRDB_USERNAME:-"tfs"}
 
@@ -90,6 +96,12 @@ export CRDB_REDEPLOY=${CRDB_REDEPLOY:-""}
 # If not already set, set the namespace where NATS will be deployed.
 export NATS_NAMESPACE=${NATS_NAMESPACE:-"nats"}
 
+# If not already set, set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT=${NATS_EXT_PORT_CLIENT:-"4222"}
+
+# If not already set, set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP=${NATS_EXT_PORT_HTTP:-"8222"}
+
 # If not already set, disable flag for re-deploying NATS from scratch.
 # WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE MESSAGE BROKER INFORMATION!
 # If NATS_REDEPLOY is "YES", the message broker will be dropped while checking/deploying NATS.
@@ -101,6 +113,15 @@ export NATS_REDEPLOY=${NATS_REDEPLOY:-""}
 # If not already set, set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE=${QDB_NAMESPACE:-"qdb"}
 
+# If not already set, set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL=${QDB_EXT_PORT_SQL:-"8812"}
+
+# If not already set, set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP=${QDB_EXT_PORT_ILP:-"9009"}
+
+# If not already set, set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP=${QDB_EXT_PORT_HTTP:-"9000"}
+
 # If not already set, set the database username to be used for QuestDB.
 export QDB_USERNAME=${QDB_USERNAME:-"admin"}
 
diff --git a/deploy/crdb.sh b/deploy/crdb.sh
index 4e8cfe2c3..216339117 100755
--- a/deploy/crdb.sh
+++ b/deploy/crdb.sh
@@ -21,6 +21,12 @@
 # If not already set, set the namespace where CockroackDB will be deployed.
 export CRDB_NAMESPACE=${CRDB_NAMESPACE:-"crdb"}
 
+# If not already set, set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL=${CRDB_EXT_PORT_SQL:-"26257"}
+
+# If not already set, set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP=${CRDB_EXT_PORT_HTTP:-"8081"}
+
 # If not already set, set the database username to be used by Context.
 export CRDB_USERNAME=${CRDB_USERNAME:-"tfs"}
 
@@ -109,24 +115,23 @@ function crdb_deploy_single() {
     echo
 
     echo "CockroachDB Port Mapping"
-    echo ">>> Expose CockroachDB SQL port (26257->26257)"
-    CRDB_SQL_PORT=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
-    PATCH='{"data": {"'${CRDB_SQL_PORT}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_SQL_PORT}'"}}'
+    echo ">>> Expose CockroachDB SQL port (26257->${CRDB_EXT_PORT_SQL})"
+    CRDB_PORT_SQL=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
+    PATCH='{"data": {"'${CRDB_EXT_PORT_SQL}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_PORT_SQL}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${CRDB_SQL_PORT}', "hostPort": '${CRDB_SQL_PORT}'}'
+    PORT_MAP='{"containerPort": '${CRDB_EXT_PORT_SQL}', "hostPort": '${CRDB_EXT_PORT_SQL}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
     echo
 
-    echo ">>> Expose CockroachDB HTTP Mgmt GUI port (8080->8081)"
-    CRDB_GUI_PORT_EXT="8081"
-    CRDB_GUI_PORT=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
-    PATCH='{"data": {"'${CRDB_GUI_PORT_EXT}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_GUI_PORT}'"}}'
+    echo ">>> Expose CockroachDB HTTP Mgmt GUI port (8080->${CRDB_EXT_PORT_HTTP})"
+    CRDB_PORT_HTTP=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
+    PATCH='{"data": {"'${CRDB_EXT_PORT_HTTP}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_PORT_HTTP}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${CRDB_GUI_PORT_EXT}', "hostPort": '${CRDB_GUI_PORT_EXT}'}'
+    PORT_MAP='{"containerPort": '${CRDB_EXT_PORT_HTTP}', "hostPort": '${CRDB_EXT_PORT_HTTP}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
@@ -153,7 +158,8 @@ function crdb_undeploy_single() {
 
 function crdb_drop_database_single() {
     echo "Drop database if exists"
-    CRDB_CLIENT_URL="postgresql://${CRDB_USERNAME}:${CRDB_PASSWORD}@cockroachdb-0:${CRDB_SQL_PORT}/defaultdb?sslmode=require"
+    CRDB_PORT_SQL=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
+    CRDB_CLIENT_URL="postgresql://${CRDB_USERNAME}:${CRDB_PASSWORD}@cockroachdb-0:${CRDB_PORT_SQL}/defaultdb?sslmode=require"
     kubectl exec -it --namespace ${CRDB_NAMESPACE} cockroachdb-0 -- \
         ./cockroach sql --certs-dir=/cockroach/cockroach-certs --url=${CRDB_CLIENT_URL} \
         --execute "DROP DATABASE IF EXISTS ${CRDB_DATABASE};"
@@ -263,24 +269,23 @@ function crdb_deploy_cluster() {
     echo
 
     echo "CockroachDB Port Mapping"
-    echo ">>> Expose CockroachDB SQL port (26257)"
-    CRDB_SQL_PORT=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
-    PATCH='{"data": {"'${CRDB_SQL_PORT}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_SQL_PORT}'"}}'
+    echo ">>> Expose CockroachDB SQL port (26257->${CRDB_EXT_PORT_SQL})"
+    CRDB_PORT_SQL=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
+    PATCH='{"data": {"'${CRDB_EXT_PORT_SQL}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_PORT_SQL}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${CRDB_SQL_PORT}', "hostPort": '${CRDB_SQL_PORT}'}'
+    PORT_MAP='{"containerPort": '${CRDB_EXT_PORT_SQL}', "hostPort": '${CRDB_EXT_PORT_SQL}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
     echo
 
-    echo ">>> Expose CockroachDB HTTP Mgmt GUI port (8080->8081)"
-    CRDB_GUI_PORT_EXT="8081"
-    CRDB_GUI_PORT=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
-    PATCH='{"data": {"'${CRDB_GUI_PORT_EXT}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_GUI_PORT}'"}}'
+    echo ">>> Expose CockroachDB HTTP Mgmt GUI port (8080->${CRDB_EXT_PORT_HTTP})"
+    CRDB_PORT_HTTP=$(kubectl --namespace ${CRDB_NAMESPACE} get service cockroachdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
+    PATCH='{"data": {"'${CRDB_EXT_PORT_HTTP}'": "'${CRDB_NAMESPACE}'/cockroachdb-public:'${CRDB_PORT_HTTP}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${CRDB_GUI_PORT_EXT}', "hostPort": '${CRDB_GUI_PORT_EXT}'}'
+    PORT_MAP='{"containerPort": '${CRDB_EXT_PORT_HTTP}', "hostPort": '${CRDB_EXT_PORT_HTTP}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
@@ -342,17 +347,23 @@ function crdb_drop_database_cluster() {
 if [ "$CRDB_DEPLOY_MODE" == "single" ]; then
     if [ "$CRDB_REDEPLOY" == "YES" ]; then
         crdb_undeploy_single
-    elif [ "$CRDB_DROP_DATABASE_IF_EXISTS" == "YES" ]; then
-        crdb_drop_database_single
     fi
+
     crdb_deploy_single
+
+    if [ "$CRDB_DROP_DATABASE_IF_EXISTS" == "YES" ]; then
+        crdb_drop_database_single
+    fi
 elif [ "$CRDB_DEPLOY_MODE" == "cluster" ]; then
     if [ "$CRDB_REDEPLOY" == "YES" ]; then
         crdb_undeploy_cluster
-    elif [ "$CRDB_DROP_DATABASE_IF_EXISTS" == "YES" ]; then
-        crdb_drop_database_cluster
     fi
+
     crdb_deploy_cluster
+
+    if [ "$CRDB_DROP_DATABASE_IF_EXISTS" == "YES" ]; then
+        crdb_drop_database_cluster
+    fi
 else
     echo "Unsupported value: CRDB_DEPLOY_MODE=$CRDB_DEPLOY_MODE"
 fi
diff --git a/deploy/nats.sh b/deploy/nats.sh
index 9edbc7765..aa082b54b 100755
--- a/deploy/nats.sh
+++ b/deploy/nats.sh
@@ -21,6 +21,12 @@
 # If not already set, set the namespace where NATS will be deployed.
 export NATS_NAMESPACE=${NATS_NAMESPACE:-"nats"}
 
+# If not already set, set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT=${NATS_EXT_PORT_CLIENT:-"4222"}
+
+# If not already set, set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP=${NATS_EXT_PORT_HTTP:-"8222"}
+
 # If not already set, disable flag for re-deploying NATS from scratch.
 # WARNING: ACTIVATING THIS FLAG IMPLIES LOOSING THE MESSAGE BROKER INFORMATION!
 # If NATS_REDEPLOY is "YES", the message broker will be dropped while checking/deploying NATS.
@@ -43,14 +49,14 @@ function nats_deploy_single() {
 
     echo "Install NATS (single-node)"
     echo ">>> Checking if NATS is deployed..."
-    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/nats &> /dev/null; then
+    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; then
         echo ">>> NATS is present; skipping step."
     else
         echo ">>> Deploy NATS"
-        helm3 install nats nats/nats --namespace ${NATS_NAMESPACE} --set nats.image.tag=2.9-alpine
+        helm3 install ${NATS_NAMESPACE} nats/nats --namespace ${NATS_NAMESPACE} --set nats.image.tag=2.9-alpine
 
         echo ">>> Waiting NATS statefulset to be created..."
-        while ! kubectl get --namespace ${NATS_NAMESPACE} statefulset/nats &> /dev/null; do
+        while ! kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; do
             printf "%c" "."
             sleep 1
         done
@@ -64,32 +70,32 @@ function nats_deploy_single() {
         #kubectl wait --namespace ${NATS_NAMESPACE} --for=jsonpath='{.status.readyReplicas}'=3 --timeout=300s \
         #    statefulset/nats
         echo ">>> NATS statefulset created. Waiting NATS pods to be created..."
-        while ! kubectl get --namespace ${NATS_NAMESPACE} pod/nats-0 &> /dev/null; do
+        while ! kubectl get --namespace ${NATS_NAMESPACE} pod/${NATS_NAMESPACE}-0 &> /dev/null; do
             printf "%c" "."
             sleep 1
         done
-        kubectl wait --namespace ${NATS_NAMESPACE} --for=condition=Ready --timeout=300s pod/nats-0
+        kubectl wait --namespace ${NATS_NAMESPACE} --for=condition=Ready --timeout=300s pod/${NATS_NAMESPACE}-0
     fi
     echo
 
     echo "NATS Port Mapping"
-    echo ">>> Expose NATS Client port (4222)"
-    NATS_CLIENT_PORT=$(kubectl --namespace ${NATS_NAMESPACE} get service nats -o 'jsonpath={.spec.ports[?(@.name=="client")].port}')
-    PATCH='{"data": {"'${NATS_CLIENT_PORT}'": "'${NATS_NAMESPACE}'/nats:'${NATS_CLIENT_PORT}'"}}'
+    echo ">>> Expose NATS Client port (4222->${NATS_EXT_PORT_CLIENT})"
+    NATS_PORT_CLIENT=$(kubectl --namespace ${NATS_NAMESPACE} get service ${NATS_NAMESPACE} -o 'jsonpath={.spec.ports[?(@.name=="client")].port}')
+    PATCH='{"data": {"'${NATS_EXT_PORT_CLIENT}'": "'${NATS_NAMESPACE}'/'${NATS_NAMESPACE}':'${NATS_PORT_CLIENT}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${NATS_CLIENT_PORT}', "hostPort": '${NATS_CLIENT_PORT}'}'
+    PORT_MAP='{"containerPort": '${NATS_EXT_PORT_CLIENT}', "hostPort": '${NATS_EXT_PORT_CLIENT}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
     echo
 
-    echo ">>> Expose NATS HTTP Mgmt GUI port (8222)"
-    NATS_GUI_PORT=$(kubectl --namespace ${NATS_NAMESPACE} get service nats -o 'jsonpath={.spec.ports[?(@.name=="monitor")].port}')
-    PATCH='{"data": {"'${NATS_GUI_PORT}'": "'${NATS_NAMESPACE}'/nats:'${NATS_GUI_PORT}'"}}'
+    echo ">>> Expose NATS HTTP Mgmt GUI port (8222->${NATS_EXT_PORT_HTTP})"
+    NATS_PORT_HTTP=$(kubectl --namespace ${NATS_NAMESPACE} get service ${NATS_NAMESPACE} -o 'jsonpath={.spec.ports[?(@.name=="monitor")].port}')
+    PATCH='{"data": {"'${NATS_EXT_PORT_HTTP}'": "'${NATS_NAMESPACE}'/'${NATS_NAMESPACE}':'${NATS_PORT_HTTP}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${NATS_GUI_PORT}', "hostPort": '${NATS_GUI_PORT}'}'
+    PORT_MAP='{"containerPort": '${NATS_EXT_PORT_HTTP}', "hostPort": '${NATS_EXT_PORT_HTTP}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
@@ -99,9 +105,9 @@ function nats_deploy_single() {
 function nats_undeploy_single() {
     echo "NATS"
     echo ">>> Checking if NATS is deployed..."
-    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/nats &> /dev/null; then
+    if kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; then
         echo ">>> Undeploy NATS"
-        helm3 uninstall --namespace ${NATS_NAMESPACE} nats
+        helm3 uninstall --namespace ${NATS_NAMESPACE} ${NATS_NAMESPACE}
     else
         echo ">>> NATS is not present; skipping step."
     fi
diff --git a/deploy/qdb.sh b/deploy/qdb.sh
index d94c000bf..cba8a5c00 100755
--- a/deploy/qdb.sh
+++ b/deploy/qdb.sh
@@ -21,6 +21,15 @@
 # If not already set, set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE=${QDB_NAMESPACE:-"qdb"}
 
+# If not already set, set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL=${QDB_EXT_PORT_SQL:-"8812"}
+
+# If not already set, set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP=${QDB_EXT_PORT_ILP:-"9009"}
+
+# If not already set, set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP=${QDB_EXT_PORT_HTTP:-"9000"}
+
 # If not already set, set the database username to be used for QuestDB.
 export QDB_USERNAME=${QDB_USERNAME:-"admin"}
 
@@ -96,34 +105,34 @@ function qdb_deploy() {
     echo
 
     echo "QuestDB Port Mapping"
-    echo ">>> Expose QuestDB SQL port (8812->8812)"
-    QDB_SQL_PORT=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
-    PATCH='{"data": {"'${QDB_SQL_PORT}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_SQL_PORT}'"}}'
+    echo ">>> Expose QuestDB SQL port (8812->${QDB_EXT_PORT_SQL})"
+    QDB_PORT_SQL=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="sql")].port}')
+    PATCH='{"data": {"'${QDB_EXT_PORT_SQL}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_PORT_SQL}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${QDB_SQL_PORT}', "hostPort": '${QDB_SQL_PORT}'}'
+    PORT_MAP='{"containerPort": '${QDB_EXT_PORT_SQL}', "hostPort": '${QDB_EXT_PORT_SQL}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
     echo
 
-    echo ">>> Expose QuestDB Influx Line Protocol port (9009->9009)"
-    QDB_ILP_PORT=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="ilp")].port}')
-    PATCH='{"data": {"'${QDB_ILP_PORT}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_ILP_PORT}'"}}'
+    echo ">>> Expose QuestDB Influx Line Protocol port (9009->${QDB_EXT_PORT_ILP})"
+    QDB_PORT_ILP=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="ilp")].port}')
+    PATCH='{"data": {"'${QDB_EXT_PORT_ILP}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_PORT_ILP}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${QDB_ILP_PORT}', "hostPort": '${QDB_ILP_PORT}'}'
+    PORT_MAP='{"containerPort": '${QDB_EXT_PORT_ILP}', "hostPort": '${QDB_EXT_PORT_ILP}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
     echo
 
-    echo ">>> Expose QuestDB HTTP Mgmt GUI port (9000->9000)"
-    QDB_GUI_PORT=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
-    PATCH='{"data": {"'${QDB_GUI_PORT}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_GUI_PORT}'"}}'
+    echo ">>> Expose QuestDB HTTP Mgmt GUI port (9000->${QDB_EXT_PORT_HTTP})"
+    QDB_PORT_HTTP=$(kubectl --namespace ${QDB_NAMESPACE} get service questdb-public -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
+    PATCH='{"data": {"'${QDB_EXT_PORT_HTTP}'": "'${QDB_NAMESPACE}'/questdb-public:'${QDB_PORT_HTTP}'"}}'
     kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
 
-    PORT_MAP='{"containerPort": '${QDB_GUI_PORT}', "hostPort": '${QDB_GUI_PORT}'}'
+    PORT_MAP='{"containerPort": '${QDB_EXT_PORT_HTTP}', "hostPort": '${QDB_EXT_PORT_HTTP}'}'
     CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
     PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
     kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
@@ -161,7 +170,10 @@ function qdb_drop_tables() {
 
 if [ "$QDB_REDEPLOY" == "YES" ]; then
     qdb_undeploy
-elif [ "$QDB_DROP_TABLES_IF_EXIST" == "YES" ]; then
-    qdb_drop_tables
 fi
+
 qdb_deploy
+
+if [ "$QDB_DROP_TABLES_IF_EXIST" == "YES" ]; then
+    qdb_drop_tables
+fi
diff --git a/deploy/tfs.sh b/deploy/tfs.sh
index 16cf5c13b..4c6dc95d2 100755
--- a/deploy/tfs.sh
+++ b/deploy/tfs.sh
@@ -51,6 +51,12 @@ export TFS_SKIP_BUILD=${TFS_SKIP_BUILD:-""}
 # If not already set, set the namespace where CockroackDB will be deployed.
 export CRDB_NAMESPACE=${CRDB_NAMESPACE:-"crdb"}
 
+# If not already set, set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL=${CRDB_EXT_PORT_SQL:-"26257"}
+
+# If not already set, set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP=${CRDB_EXT_PORT_HTTP:-"8081"}
+
 # If not already set, set the database username to be used by Context.
 export CRDB_USERNAME=${CRDB_USERNAME:-"tfs"}
 
@@ -66,12 +72,27 @@ export CRDB_DATABASE=${CRDB_DATABASE:-"tfs"}
 # If not already set, set the namespace where NATS will be deployed.
 export NATS_NAMESPACE=${NATS_NAMESPACE:-"nats"}
 
+# If not already set, set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT=${NATS_EXT_PORT_CLIENT:-"4222"}
+
+# If not already set, set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP=${NATS_EXT_PORT_HTTP:-"8222"}
+
 
 # ----- QuestDB ----------------------------------------------------------------
 
 # If not already set, set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE=${QDB_NAMESPACE:-"qdb"}
 
+# If not already set, set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL=${QDB_EXT_PORT_SQL:-"8812"}
+
+# If not already set, set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP=${QDB_EXT_PORT_ILP:-"9009"}
+
+# If not already set, set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP=${QDB_EXT_PORT_HTTP:-"9000"}
+
 # If not already set, set the database username to be used for QuestDB.
 export QDB_USERNAME=${QDB_USERNAME:-"admin"}
 
@@ -116,7 +137,7 @@ kubectl create secret generic crdb-data --namespace ${TFS_K8S_NAMESPACE} --type=
 printf "\n"
 
 echo "Create secret with NATS data"
-NATS_CLIENT_PORT=$(kubectl --namespace ${NATS_NAMESPACE} get service nats -o 'jsonpath={.spec.ports[?(@.name=="client")].port}')
+NATS_CLIENT_PORT=$(kubectl --namespace ${NATS_NAMESPACE} get service ${NATS_NAMESPACE} -o 'jsonpath={.spec.ports[?(@.name=="client")].port}')
 kubectl create secret generic nats-data --namespace ${TFS_K8S_NAMESPACE} --type='Opaque' \
     --from-literal=NATS_NAMESPACE=${NATS_NAMESPACE} \
     --from-literal=NATS_CLIENT_PORT=${NATS_CLIENT_PORT}
@@ -303,12 +324,16 @@ for COMPONENT in $TFS_COMPONENTS; do
     printf "\n"
 done
 
-if [[ "$TFS_COMPONENTS" == *"webui"* ]] && [[ "$TFS_COMPONENTS" == *"monitoring"* ]]; then
+if [[ "$TFS_COMPONENTS" == *"webui"* ]]; then
     echo "Configuring WebUI DataStores and Dashboards..."
     sleep 5
 
+    INGRESS_CTRL_NAME=$(echo "${TFS_K8S_NAMESPACE}" | sed "s/tfs/nginx-ingress-microk8s-controller/g")
+    EXT_HTTP_PORT=$(kubectl get daemonsets.apps --namespace ingress ${INGRESS_CTRL_NAME} \
+        -o 'jsonpath={.spec.template.spec.containers[?(@.name=="nginx-ingress-microk8s")].ports[?(@.name=="http")].hostPort}')
+
     # Exposed through the ingress controller "tfs-ingress"
-    GRAFANA_URL="127.0.0.1:80/grafana"
+    GRAFANA_URL="127.0.0.1:${EXT_HTTP_PORT}/grafana"
 
     # Default Grafana credentials
     GRAFANA_USERNAME="admin"
diff --git a/my_deploy.sh b/my_deploy.sh
index 518b90f28..22a7ae815 100755
--- a/my_deploy.sh
+++ b/my_deploy.sh
@@ -43,6 +43,12 @@ export TFS_SKIP_BUILD=""
 # Set the namespace where CockroackDB will be deployed.
 export CRDB_NAMESPACE="crdb"
 
+# Set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL="26257"
+
+# Set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP="8081"
+
 # Set the database username to be used by Context.
 export CRDB_USERNAME="tfs"
 
@@ -68,6 +74,12 @@ export CRDB_REDEPLOY=""
 # Set the namespace where NATS will be deployed.
 export NATS_NAMESPACE="nats"
 
+# Set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT="4222"
+
+# Set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP="8222"
+
 # Disable flag for re-deploying NATS from scratch.
 export NATS_REDEPLOY=""
 
@@ -77,6 +89,15 @@ export NATS_REDEPLOY=""
 # Set the namespace where QuestDB will be deployed.
 export QDB_NAMESPACE="qdb"
 
+# Set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL="8812"
+
+# Set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP="9009"
+
+# Set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP="9000"
+
 # Set the database username to be used for QuestDB.
 export QDB_USERNAME="admin"
 
-- 
GitLab


From 876a338a68ff80a0c7f1568404b1808635e7cc11 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 13:44:30 +0000
Subject: [PATCH 190/229] Manifests:

- Restored log levels
---
 manifests/deviceservice.yaml   | 2 +-
 manifests/pathcompservice.yaml | 2 +-
 manifests/serviceservice.yaml  | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/manifests/deviceservice.yaml b/manifests/deviceservice.yaml
index ddcc997cd..ca2c81f0f 100644
--- a/manifests/deviceservice.yaml
+++ b/manifests/deviceservice.yaml
@@ -36,7 +36,7 @@ spec:
         - containerPort: 9192
         env:
         - name: LOG_LEVEL
-          value: "DEBUG"
+          value: "INFO"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:2020"]
diff --git a/manifests/pathcompservice.yaml b/manifests/pathcompservice.yaml
index 5916d09a6..fd3599f42 100644
--- a/manifests/pathcompservice.yaml
+++ b/manifests/pathcompservice.yaml
@@ -36,7 +36,7 @@ spec:
         - containerPort: 9192
         env:
         - name: LOG_LEVEL
-          value: "DEBUG"
+          value: "INFO"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:10020"]
diff --git a/manifests/serviceservice.yaml b/manifests/serviceservice.yaml
index 801c06f52..3fa4a6e0d 100644
--- a/manifests/serviceservice.yaml
+++ b/manifests/serviceservice.yaml
@@ -36,7 +36,7 @@ spec:
         - containerPort: 9192
         env:
         - name: LOG_LEVEL
-          value: "DEBUG"
+          value: "INFO"
         readinessProbe:
           exec:
             command: ["/bin/grpc_health_probe", "-addr=:3030"]
-- 
GitLab


From d3131c44cd341006b2a2a91acca5346164153379 Mon Sep 17 00:00:00 2001
From: Ville Hallivuori <VHallivuori@infinera.com>
Date: Wed, 1 Mar 2023 16:01:11 +0200
Subject: [PATCH 191/229] Improved XR Device Driver IPM error reporting

---
 src/device/requirements.in                    |   1 +
 src/device/service/drivers/xr/README_XR.md    |   2 +-
 src/device/service/drivers/xr/XrDriver.py     |   3 +-
 src/device/service/drivers/xr/cm-cli.py       | 213 ++++++++-------
 .../service/drivers/xr/cm/cm_connection.py    | 242 ++++++++++++++++--
 .../drivers/xr/cm/tests/test_cm_connection.py |  10 +-
 .../xr/cm/tests/test_xr_service_set_config.py |  25 +-
 src/device/service/drivers/xr/cm/tf.py        |  20 +-
 8 files changed, 378 insertions(+), 138 deletions(-)

diff --git a/src/device/requirements.in b/src/device/requirements.in
index ec29fc7a3..50b941160 100644
--- a/src/device/requirements.in
+++ b/src/device/requirements.in
@@ -29,6 +29,7 @@ xmltodict==0.12.0
 tabulate
 ipaddress
 macaddress
+websockets==10.4
 
 # pip's dependency resolver does not take into account installed packages.
 # p4runtime does not specify the version of grpcio/protobuf it needs, so it tries to install latest one
diff --git a/src/device/service/drivers/xr/README_XR.md b/src/device/service/drivers/xr/README_XR.md
index fa1bc9440..9c64cdef1 100644
--- a/src/device/service/drivers/xr/README_XR.md
+++ b/src/device/service/drivers/xr/README_XR.md
@@ -107,7 +107,7 @@ This will make imports to work properly in all cases.
 Run deploy script to build in docker containers and then instantiate to configured K8s cluster. Deploy script must be sources for this to work!
 
 ```bash
-./deploy.sh
+./deploy/all.sh
 ```
 
 If protobuf definitions have changed, regenerate version controlled Java files manually
diff --git a/src/device/service/drivers/xr/XrDriver.py b/src/device/service/drivers/xr/XrDriver.py
index 605f4ce8d..3114bcc2c 100644
--- a/src/device/service/drivers/xr/XrDriver.py
+++ b/src/device/service/drivers/xr/XrDriver.py
@@ -45,7 +45,7 @@ class XrDriver(_Driver):
         tls_verify = False # Currently using self signed certificates
         username = settings.get("username", "xr-user-1")
         password = settings.get("password", "xr-user-1")
-        
+
         # Options are:
         #    asynchronous --> operation considered complete when IPM responds with suitable status code,
         #                     including "accepted", that only means request is semantically good and queued.
@@ -77,6 +77,7 @@ class XrDriver(_Driver):
     def Disconnect(self) -> bool:
         LOGGER.info(f"Disconnect[{self}]")
         with self.__lock:
+            self.__cm_connection.stop_monitoring_errors()
             self.__terminate.set()
             return True
 
diff --git a/src/device/service/drivers/xr/cm-cli.py b/src/device/service/drivers/xr/cm-cli.py
index 924ca0c96..6e9dc8387 100755
--- a/src/device/service/drivers/xr/cm-cli.py
+++ b/src/device/service/drivers/xr/cm-cli.py
@@ -16,16 +16,22 @@
 
 # Test program for CmConnection
 import argparse
+import signal
 import logging
 import traceback
+import threading
 from typing import Tuple
-from cm.cm_connection import CmConnection, ConsistencyMode
+from cm.cm_connection import CmConnection, ConsistencyMode, ErrorFromIpm
 from cm.tf_service import TFService
 from cm.transport_capacity import TransportCapacity
 from cm.connection import Connection
 import cm.tf as tf
+import asyncio
+import websockets
+import ssl
+import time
 
-logging.basicConfig(level=logging.INFO)
+logging.basicConfig(level=logging.WARNING)
 
 parser = argparse.ArgumentParser(description='CM Connectin Test Utility')
 parser.add_argument('ip', help='CM IP address or domain name')
@@ -33,6 +39,7 @@ parser.add_argument('port', help='CM port', type=int)
 parser.add_argument('username', help='Username')
 parser.add_argument('password', help='Password')
 
+parser.add_argument('--monitor-errors', action='store_true')
 parser.add_argument('--list-constellations', action='store_true')
 parser.add_argument('--show-constellation-by-hub-name', nargs='?', type=str)
 parser.add_argument('--create-connection', nargs='?', type=str, help="uuid;ifname;ifname;capacity")
@@ -84,98 +91,118 @@ else:
     retry_interval = 0.2
 
 cm = CmConnection(args.ip, args.port, args.username, args.password, timeout=args.timeout, tls_verify=False, consistency_mode=consistency_mode, retry_interval=retry_interval)
-if not cm.Connect():
-    exit(-1)
-
-if args.list_constellations:
-    constellations = cm.list_constellations()
-    for constellation in constellations:
-        print("Constellation:", constellation.constellation_id)
-        for if_name in constellation.ifnames():
-            print(f"    {if_name}")
-
-if args.show_constellation_by_hub_name:
-    constellation = cm.get_constellation_by_hub_name(args.show_constellation_by_hub_name)
-    if constellation:
-        print(f"Constellation: {constellation.constellation_id},  traffic-mode: {constellation.traffic_mode}")
-        for if_name in constellation.ifnames():
-            print(f"    {if_name}")
-
-if args.create_connection:
-    tf_service = cli_create_string_to_tf_service(args.create_connection)
-    connection = Connection(from_tf_service=tf_service)
-    created_service = cm.create_connection(connection)
-    if created_service:
-        print(f"Created {created_service} for {connection}")
-    else:
-        print(f"Failed to create {connection}")
-
-if args.modify_connection:
-    href, tf_service = cli_modify_string_to_tf_service(args.modify_connection)
-    mc_args = args.modify_connection.split(";")
-    connection = Connection(from_tf_service=tf_service)
-    result = cm.update_connection(href, connection)
-    if result:
-        print(f"Updated {href} for {connection}")
-    else:
-        print(f"Failed to update {href} for {connection}")
-
-if args.show_connection_by_name:
-    connection = cm.get_connection_by_name(args.show_connection_by_name)
-    if connection:
-        print(str(connection))
-
-if args.list_connections:
-    connections = cm.get_connections()
-    for c in connections:
-        print(str(c))
-
-if args.delete_connection:
-    was_deleted = cm.delete_connection(args.delete_connection)
-    if was_deleted:
-        print(f"Successfully deleted {args.delete_connection}")
-    else:
-        print(f"Failed to delete {args.delete_connection}")
-
-if args.list_transport_capacities:
-    tcs = cm.get_transport_capacities()
-    for tc in tcs:
-        print(str(tc))
-
-if args.create_transport_capacity:
-    tf_service = cli_create_string_to_tf_service(args.create_transport_capacity)
-    tc = TransportCapacity(from_tf_service=tf_service)
-    created_service = cm.create_transport_capacity(tc)
-    if created_service:
-        print(f"Created {created_service} for {tc}")
-    else:
-        print(f"Failed to create {tc}")
-
-if args.emulate_tf_set_config_service:
-    eargs = args.emulate_tf_set_config_service.split(";")
-    if len(eargs) < 5:
-        print("Mandatory tokens missing for --emulate-tf-set-config-service")
-        exit(-1)
 
-    hub_module_name, uuid, input_sip, output_sip, capacity_value  = eargs[0:5]
-    capacity_value = int(capacity_value)
-    config = {
-        "input_sip": input_sip,
-        "output_sip": output_sip,
-        "capacity_value": capacity_value,
-        "capacity_unit": "gigabit"
-    }
+terminate = threading.Event()
+def signal_handler(sig, frame):
+    cm.stop_monitoring_errors()
+    terminate.set()
 
-    constellation = cm.get_constellation_by_hub_name(hub_module_name)
+signal.signal(signal.SIGINT, signal_handler)
 
-    # Allow testing some of the VTI code before we have CM that has VTI
-    if len(eargs) > 5 and eargs[5] == "FORCE-VTI-ON":
-        constellation.traffic_mode = "VTIMode"
-
-    if constellation is None:
-        print(f"Unable to find constellation for hub-module {hub_module_name}")
+try:
+    if not cm.Connect():
         exit(-1)
-    result = tf.set_config_for_service(cm, constellation, uuid, config)
-    print(f"Emulated SetConfig() for service result: {result}")
-    if isinstance(result, Exception):
-        traceback.print_exception(result)
+
+    if args.list_constellations:
+        constellations = cm.list_constellations()
+        for constellation in constellations:
+            print("Constellation:", constellation.constellation_id)
+            for if_name in constellation.ifnames():
+                print(f"    {if_name}")
+
+    if args.show_constellation_by_hub_name:
+        constellation = cm.get_constellation_by_hub_name(args.show_constellation_by_hub_name)
+        if constellation:
+            print(f"Constellation: {constellation.constellation_id},  traffic-mode: {constellation.traffic_mode}")
+            for if_name in constellation.ifnames():
+                print(f"    {if_name}")
+
+    if args.create_connection:
+        tf_service = cli_create_string_to_tf_service(args.create_connection)
+        connection = Connection(from_tf_service=tf_service)
+        try:
+            created_service = cm.create_connection(connection)
+            if created_service:
+                print(f"Created {created_service} for {connection}")
+            else:
+                print(f"Failed to create {connection}")
+        except ErrorFromIpm as ipm_err:
+            print(f"Failed to create {connection}: {str(ipm_err)}")
+
+    if args.modify_connection:
+        href, tf_service = cli_modify_string_to_tf_service(args.modify_connection)
+        mc_args = args.modify_connection.split(";")
+        connection = Connection(from_tf_service=tf_service)
+        result = cm.update_connection(href, connection)
+        if result:
+            print(f"Updated {href} for {connection}")
+        else:
+            print(f"Failed to update {href} for {connection}")
+
+    if args.show_connection_by_name:
+        connection = cm.get_connection_by_name(args.show_connection_by_name)
+        if connection:
+            print(str(connection))
+
+    if args.list_connections:
+        connections = cm.get_connections()
+        for c in connections:
+            print(str(c))
+
+    if args.delete_connection:
+        was_deleted = cm.delete_connection(args.delete_connection)
+        if was_deleted:
+            print(f"Successfully deleted {args.delete_connection}")
+        else:
+            print(f"Failed to delete {args.delete_connection}")
+
+    if args.list_transport_capacities:
+        tcs = cm.get_transport_capacities()
+        for tc in tcs:
+            print(str(tc))
+
+    if args.create_transport_capacity:
+        tf_service = cli_create_string_to_tf_service(args.create_transport_capacity)
+        tc = TransportCapacity(from_tf_service=tf_service)
+        created_service = cm.create_transport_capacity(tc)
+        if created_service:
+            print(f"Created {created_service} for {tc}")
+        else:
+            print(f"Failed to create {tc}")
+
+    if args.emulate_tf_set_config_service:
+        eargs = args.emulate_tf_set_config_service.split(";")
+        if len(eargs) < 5:
+            print("Mandatory tokens missing for --emulate-tf-set-config-service")
+            exit(-1)
+
+        hub_module_name, uuid, input_sip, output_sip, capacity_value  = eargs[0:5]
+        capacity_value = int(capacity_value)
+        config = {
+            "input_sip": input_sip,
+            "output_sip": output_sip,
+            "capacity_value": capacity_value,
+            "capacity_unit": "gigabit"
+        }
+
+        constellation = cm.get_constellation_by_hub_name(hub_module_name)
+
+        # Allow testing some of the VTI code before we have CM that has VTI
+        if len(eargs) > 5 and eargs[5] == "FORCE-VTI-ON":
+            constellation.traffic_mode = "VTIMode"
+
+        if constellation is None:
+            print(f"Unable to find constellation for hub-module {hub_module_name}")
+            exit(-1)
+        result = tf.set_config_for_service(cm, constellation, uuid, config)
+        print(f"Emulated SetConfig() for service result: {result}")
+        if isinstance(result, Exception):
+            traceback.print_exception(result)
+
+    if args.monitor_errors:
+        cm.print_received_errors = True
+        terminate.wait()
+
+finally:
+# Delete subscriptions. It will end monitoring thread and ensure that program terminates normally
+    cm.stop_monitoring_errors()
diff --git a/src/device/service/drivers/xr/cm/cm_connection.py b/src/device/service/drivers/xr/cm/cm_connection.py
index 712849451..bcd62862d 100644
--- a/src/device/service/drivers/xr/cm/cm_connection.py
+++ b/src/device/service/drivers/xr/cm/cm_connection.py
@@ -15,9 +15,13 @@
 
 from __future__ import annotations
 import collections.abc
+import threading
 import logging
 import json
 import time
+import asyncio
+import websockets
+import ssl
 from typing import Optional, List, Dict, Union
 import re
 import requests
@@ -51,6 +55,55 @@ class ExpiringValue:
 class UnexpectedEmptyBody(Exception):
     pass
 
+class ExternalError(Exception):
+    pass
+
+class ApiErrorFromIpm(Exception):
+    pass
+
+class ErrorFromIpm(ExternalError):
+    def __init__(self, err_dict):
+        msg = str(err_dict)
+        # Try to extract a short error message
+        try:
+            # Only look at first message
+            err_messages = err_dict["errors"]["errors"][0]["messages"]
+            for err_msg in err_messages:
+                if err_msg["lang"] == "en":
+                    msg = err_msg["message"]
+        except KeyError:
+            pass
+        except IndexError:
+            pass
+        super().__init__(msg)
+
+class CreateConsistencyError(Exception):
+    pass
+
+class ErrorStore:
+    def __init__(self):
+        self.__lock = threading.Lock()
+        self.__db={}
+        self.__enabled=False
+
+    def get_error(self, uri: str) -> Optional[dict]:
+        with self.__lock:
+            return self.__db.pop(uri, None)
+
+    def set_error(self, uri: str, err_dict: dict):
+        with self.__lock:
+            if self.__enabled:
+                self.__db[uri] = err_dict
+
+    def enable(self):
+        with self.__lock:
+            self.__enabled = True
+
+    def disable(self):
+        with self.__lock:
+            self.__enabled = False
+            self.__db.clear()
+
 # This is enum, not a regular class, see https://docs.python.org/3/library/enum.html
 # String based enums require python 3.11, so use nunber based and custom parser
 class ConsistencyMode(Enum):
@@ -134,10 +187,25 @@ class HttpResult:
 
         return True
 
+    def raise_as_exception(self):
+        if self.exception is not None:
+            raise ExternalError(f"Failure for request {str(self)}") from self.exception
+
+        status_code = self.status_code if self.status_code is not None else "<not executed>"
+
+        # Try to get error message from IPM
+        if self.json is not None and "errors" in self.json:
+            err_list = self.json["errors"]
+            if len(err_list) > 0 and "message" in err_list[0]:
+                err_msg = err_list[0]["message"]
+                raise ApiErrorFromIpm(f"{self.method} {self.url} {self.params},  status {status_code}, IPM reported error: {err_msg}")
+            
+        raise ExternalError(str(self))
+
 class CmConnection:
     CONSISTENCY_WAIT_LOG_INTERVAL = 1.0
 
-    def __init__(self, address: str, port: int, username: str, password: str, timeout=30, tls_verify=True, consistency_mode: ConsistencyMode = ConsistencyMode.asynchronous, retry_interval: float=0.2, max_consistency_tries:int = 100_000) -> None:
+    def __init__(self, address: str, port: int, username: str, password: str, timeout=30, tls_verify=True, consistency_mode: ConsistencyMode = ConsistencyMode.asynchronous, retry_interval: float=0.2, max_consistency_tries:int = 100_000, monitor_error_stream: bool = True) -> None:
         self.__tls_verify = tls_verify
         if not tls_verify:
             urllib3.disable_warnings()
@@ -151,7 +219,18 @@ class CmConnection:
         self.__username = username
         self.__password = password
         self.__cm_root = 'https://' + address + ':' + str(port)
+        self.__cm_ws_root = 'wss://' + address + ':' + str(port)
         self.__access_token = None
+        self.__monitor_error_stream = monitor_error_stream
+        self.__err_store=ErrorStore()
+        self.__err_monitor_thread = None
+        self.__err_monitor_connected = threading.Event()
+        self.__err_monitor_sub_id = None
+        self.__err_monitor_terminate = threading.Event()
+        self.print_received_errors = False
+
+    def __del__(self):
+        self.stop_monitoring_errors()
 
     def __perform_request(self, http_result: HttpResult, permit_empty_body: bool,  fn, *args, **kwargs):
         try:
@@ -238,7 +317,121 @@ class CmConnection:
             self.__acquire_access_token()
 
     def Connect(self) -> bool:
-        return self.__acquire_access_token()
+        if not self.__acquire_access_token():
+            return False
+        return self.monitor_errors() if self.__monitor_error_stream else True
+
+    def subscribe_errors(self):
+        sub = [
+            {
+                "subscriptionName": "TfXrDriverErrorMonitopr",
+                "subscriptionFilters": [
+                    {
+                        "requestedNotificationTypes": [ "Error" ],
+                        "requestedResources": [
+                            {
+                                "resourceType": "cm.network-connection",
+                            }
+                        ]
+                    },
+                ]
+            }
+        ]
+
+        r = self.__post("/api/v1/subscriptions/events", sub)
+        #print(r.status_code, r.text)
+        if not r.is_valid_json_list_with_status(201) or len(r.json) != 1:
+            return None, None
+        try:
+            return self.__cm_ws_root + r.json[0]["notificationChannel"]["streamAddress"], r.json[0]["subscriptionId"]
+        except KeyError:
+            return None, None
+
+    def unsubscribe(self, sub_id: str):
+        resp = self.__delete(f"/api/v1/subscriptions/events/{sub_id}")
+        if resp.is_valid_with_status_ignore_body(202):
+            LOGGER.info(f"Deleted subscription {sub_id=}")
+            return True
+        else:
+            LOGGER.info(f"Deleting subscription {sub_id=} failed, status {resp.status_code}")
+            return False
+
+    def monitor_errors(self) -> bool:
+        uri, sub_id = self.subscribe_errors()
+        if not uri or not sub_id:
+            return False
+        self.__err_monitor_sub_id = sub_id
+
+        def err_monitor_thread():
+            LOGGER.info(f"Listening errors via {uri}")
+
+            ctx = ssl.create_default_context()
+            if not self.__tls_verify:
+                ctx.check_hostname = False
+                ctx.verify_mode = ssl.CERT_NONE
+
+            async def receive_websock(uri, ssl_ctx):
+                while not self.__err_monitor_terminate.is_set():
+                    try:
+                        async with websockets.connect(uri, ssl=ssl_ctx) as websocket:
+                            LOGGER.info(f"err_monitor_thread(): WebSock connected to {uri}")
+                            self.__err_monitor_connected.set()
+                            while not self.__err_monitor_terminate.is_set():
+                                # 5s timeout is used for forced checking of terminate flag
+                                # In normal termmination timeout is not experienced, as
+                                # we unsubscribe and that will trigger server to close the
+                                # connection. This timeout exists purely as backup
+                                # in case unsubscribe fails
+                                try:
+                                    msg = await asyncio.wait_for(websocket.recv(), timeout=5.0)
+                                except asyncio.exceptions.TimeoutError:
+                                    continue
+                                if self.print_received_errors:
+                                    print(f"RX: {msg}")
+                                try:
+                                    msg_json = json.loads(msg)
+                                    href = msg_json["href"]
+                                    LOGGER.debug(f"err_monitor_thread(): RX [{href}]: {msg}")
+                                    self.__err_store.set_error(href, msg_json)
+                                except json.JSONDecodeError as json_err:
+                                    LOGGER.error(f"err_monitor_thread(): Invalid message received: {msg}, JSON decode error {str(json_err)}")
+                                except KeyError:
+                                    LOGGER.error(f"err_monitor_thread(): Missing href in message: {msg}")
+                    except asyncio.CancelledError as e:
+                        LOGGER.debug("err_monitor_thread(): monitoring cancelled")
+                        raise e
+                    except Exception as e:
+                        if not self.__err_monitor_terminate.is_set():
+                            LOGGER.error(f"err_monitor_thread(): exception {str(e)}, reconnecting")
+                            time.sleep(1)
+
+            asyncio.run(receive_websock(uri, ctx))
+            LOGGER.debug("err_monitor_thread(): thread terminating")
+
+        assert self.__err_monitor_thread is None
+        self.__err_monitor_terminate.clear()
+        self.__err_monitor_thread = threading.Thread(target=err_monitor_thread)
+        self.__err_monitor_thread.start()
+        # If we can get connection soon, wait for it, otherwise proceed without delay
+        # Not waiting for connection may miss some errors (-->timeout later), waiting too long
+        # makes for bad experience
+        self.__err_monitor_connected.wait(0.5)
+
+        return True
+
+    def stop_monitoring_errors(self):
+        self.__err_monitor_terminate.set()
+
+        if self.__err_monitor_sub_id:
+            LOGGER.debug(f"Disabling error subscribtion {self.__err_monitor_sub_id }")
+            self.unsubscribe(self.__err_monitor_sub_id)
+            self.__err_monitor_sub_id = None
+
+        if self.__err_monitor_thread is not None:
+            LOGGER.debug("Terminating error monitoring thread")
+            self.__err_monitor_thread.join()
+            LOGGER.info("Error monitoring thread terminated")
+            self.__err_monitor_thread = None
 
     def list_constellations(self) -> List[Constellation]:
         r = self.__get("/api/v1/xr-networks?content=expanded")
@@ -246,7 +439,6 @@ class CmConnection:
             return []
         return [Constellation(c) for c in r.json]
 
-
     def get_constellation_by_hub_name(self, hub_module_name: str) -> Optional[Constellation]:
         qparams = [
             ('content', 'expanded'),
@@ -324,6 +516,11 @@ class CmConnection:
                         log_ts = ts
                         LOGGER.info(f"apply_create_consistency(): waiting for life cycle state progress for {get_result}, current: {str(get_result.life_cycle_info)}, ellapsed time {ts-ts_start} seconds")
             else:
+                err_info = self.__err_store.get_error(obj.href)
+                if err_info is not None:
+                    LOGGER.info(f"apply_create_consistency(): asynchronous error reported for {obj}: {str(err_info)}")
+                    raise ErrorFromIpm(err_info)
+
                 ts = time.perf_counter()
                 if ts - log_ts >= self.CONSISTENCY_WAIT_LOG_INTERVAL:
                     log_ts = ts
@@ -337,10 +534,13 @@ class CmConnection:
         duration = time.perf_counter() - ts_start
         if not valid:
             if get_result:
-                LOGGER.info(f"Failed to apply create consistency for {get_result}, insufficient life-cycle-state progress ({str(get_result.life_cycle_info)}), duration {duration} seconds")
+                msg = f"Failed to apply create consistency for {get_result}, insufficient life-cycle-state progress ({str(get_result.life_cycle_info)}), duration {duration} seconds"
+                LOGGER.info(msg)
+                raise CreateConsistencyError(msg)
             else:
-                LOGGER.info(f"Failed to apply create consistency for {obj}, REST object did not appear, duration {duration} seconds")
-            return None
+                msg = f"Failed to apply create consistency for {obj}, REST object did not appear, duration {duration} seconds"
+                LOGGER.info(msg)
+                raise CreateConsistencyError(msg)
         else:
             LOGGER.info(f"Applied create consistency for {get_result}, final life-cycle-state {str(get_result.life_cycle_info)}, duration {duration} seconds")
 
@@ -399,20 +599,24 @@ class CmConnection:
         # Create wants a list, so wrap connection to list
         cfg = [connection.create_config()]
 
-        resp = self.__post("/api/v1/network-connections", cfg)
-        if resp.is_valid_json_list_with_status(202, 1, 1) and "href" in resp.json[0]:
-            connection.href = resp.json[0]["href"]
-            LOGGER.info(f"IPM accepted create request for connection {connection}")
-            new_connection = self.apply_create_consistency(connection, lambda: self.get_connection_by_href(connection.href))
-            if new_connection:
-                LOGGER.info(f"Created connection {new_connection}")
-                return new_connection.href
+        self.__err_store.enable()
+        try:
+            resp = self.__post("/api/v1/network-connections", cfg)
+            if resp.is_valid_json_list_with_status(202, 1, 1) and "href" in resp.json[0]:
+                connection.href = resp.json[0]["href"]
+                LOGGER.info(f"IPM accepted create request for connection {connection}")
+                new_connection = self.apply_create_consistency(connection, lambda: self.get_connection_by_href(connection.href))
+                if new_connection:
+                    LOGGER.info(f"Created connection {new_connection}")
+                    return new_connection.href
+                else:
+                    LOGGER.error(f"Consistency failure for connection {connection}, result {resp}")
+                    return None
             else:
-                LOGGER.error(f"Consistency failure for connection {connection}, result {resp}")
-                return None
-        else:
-            LOGGER.error(f"Create failure for connection {connection}, result {resp}")
-            return None
+                LOGGER.error(f"Create failure for connection {connection}, result {resp}")
+                resp.raise_as_exception()
+        finally:
+            self.__err_store.disable()
 
     def update_connection(self, href: str, connection: Connection, existing_connection: Optional[Connection]=None) -> Optional[str]:
         cfg = connection.create_config()
diff --git a/src/device/service/drivers/xr/cm/tests/test_cm_connection.py b/src/device/service/drivers/xr/cm/tests/test_cm_connection.py
index a7944ed22..22b74f36a 100644
--- a/src/device/service/drivers/xr/cm/tests/test_cm_connection.py
+++ b/src/device/service/drivers/xr/cm/tests/test_cm_connection.py
@@ -37,30 +37,30 @@ def test_cmc_connect():
     # Valid access token
     with requests_mock.Mocker() as m:
         m.post('https://127.0.0.1:9999/realms/xr-cm/protocol/openid-connect/token', text=access_token)
-        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False)
+        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, monitor_error_stream=False)
         assert cm.Connect()
 
     # Valid JSON but no access token
     with requests_mock.Mocker() as m:
         m.post('https://127.0.0.1:9999/realms/xr-cm/protocol/openid-connect/token', text=r'{"a": "b"}')
-        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False)
+        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, monitor_error_stream=False)
         assert not cm.Connect()
 
     # Invalid JSON
     with requests_mock.Mocker() as m:
         m.post('https://127.0.0.1:9999/realms/xr-cm/protocol/openid-connect/token', text=r'}}}')
-        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False)
+        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, monitor_error_stream=False)
         assert not cm.Connect()
 
     with requests_mock.Mocker() as m:
         # No mock present for the destination
-        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False)
+        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, monitor_error_stream=False)
         assert not cm.Connect()
 
 def test_cmc_get_constellations():
     with mock_cm_connectivity() as m:
         m.get("https://127.0.0.1:9999/api/v1/xr-networks?content=expanded", text=res_constellations)
-        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False)
+        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, monitor_error_stream=False)
         assert cm.Connect()
 
         # List all constellations
diff --git a/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py b/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py
index e9b16b620..bea9b4c98 100644
--- a/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py
+++ b/src/device/service/drivers/xr/cm/tests/test_xr_service_set_config.py
@@ -20,7 +20,7 @@ import traceback
 import copy
 import requests_mock
 
-from ..cm_connection import CmConnection, ConsistencyMode
+from ..cm_connection import CmConnection, ConsistencyMode, CreateConsistencyError
 from ..tf import set_config_for_service
 
 access_token = r'{"access_token":"eyI3...","expires_in":3600,"refresh_expires_in":0,"refresh_token":"ey...","token_type":"Bearer","not-before-policy":0,"session_state":"f6e235c4-4ca4-4258-bede-4f2b7125adfb","scope":"profile email offline_access"}'
@@ -51,13 +51,16 @@ config = {
 }
 
 def _validate_result(result, expect):
-    if isinstance(result, Exception):
-        traceback.print_exception(result)
-    assert result is expect # Not, "is", not ==, we want type checking in this case, as also an exception can be returned (as return value)
+    if isinstance(expect, Exception):
+        assert type(result) == type(expect)
+    else:
+        if isinstance(result, Exception):
+            traceback.print_exception(result)
+        assert result is expect # Not, "is", not ==, we want type checking in this case, as also an exception can be returned (as return value)
 
 def test_xr_set_config():
     with mock_cm() as m:
-        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False)
+        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, monitor_error_stream=False)
         assert cm.Connect()
 
         constellation = cm.get_constellation_by_hub_name("XR HUB 1")
@@ -86,7 +89,7 @@ def repeat_last_expected(expected: list[tuple], called: list[tuple]) -> list[tup
 
 def test_xr_set_config_consistency_lifecycle():
     with mock_cm() as m:
-        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, consistency_mode=ConsistencyMode.lifecycle, retry_interval=0, timeout=1, max_consistency_tries=3)
+        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, consistency_mode=ConsistencyMode.lifecycle, retry_interval=0, timeout=1, max_consistency_tries=3, monitor_error_stream=False)
         assert cm.Connect()
 
         constellation = cm.get_constellation_by_hub_name("XR HUB 1")
@@ -125,7 +128,7 @@ def test_xr_set_config_consistency_lifecycle():
                { 'json': json_non_terminal, 'status_code': 200 }])
 
         result = set_config_for_service(cm, constellation, uuid, config)
-        _validate_result(result, False) # Service creation failure due to insufficient progress
+        _validate_result(result, CreateConsistencyError("")) # Service creation failure due to insufficient progress
 
         called_mocks = [(r._request.method, r._request.url) for r in m._adapter.request_history]
         expected_mocks_no_connect = [
@@ -139,7 +142,7 @@ def test_xr_set_config_consistency_lifecycle():
         ################################################################################
         # Same as before, but CmConnection no longer requiring lifcycle progress
         m.reset_mock()
-        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, consistency_mode=ConsistencyMode.synchronous, retry_interval=0, timeout=1, max_consistency_tries=3)
+        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, consistency_mode=ConsistencyMode.synchronous, retry_interval=0, timeout=1, max_consistency_tries=3, monitor_error_stream=False)
         assert cm.Connect()
         constellation = cm.get_constellation_by_hub_name("XR HUB 1")
         assert constellation
@@ -154,21 +157,21 @@ def test_xr_set_config_consistency_lifecycle():
         ################################################################################
         # Same as above, but without REST object appearing
         m.reset_mock()
-        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, consistency_mode=ConsistencyMode.synchronous, retry_interval=0, timeout=1, max_consistency_tries=3)
+        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, consistency_mode=ConsistencyMode.synchronous, retry_interval=0, timeout=1, max_consistency_tries=3, monitor_error_stream=False)
         assert cm.Connect()
         constellation = cm.get_constellation_by_hub_name("XR HUB 1")
         assert constellation
         m.get("https://127.0.0.1:9999/api/v1/network-connections/c3b31608-0bb7-4a4f-9f9a-88b24a059432",
               [{'text': '', 'status_code': 401}])
         result = set_config_for_service(cm, constellation, uuid, config)
-        _validate_result(result, False)
+        _validate_result(result, CreateConsistencyError(""))
         called_mocks = [(r._request.method, r._request.url) for r in m._adapter.request_history]
         assert called_mocks == repeat_last_expected(expected_mocks[:2] + expected_mocks_no_connect, called_mocks)
 
 
 def test_xr_set_config_update_case():
     with mock_cm() as m:
-        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False)
+        cm = CmConnection("127.0.0.1", 9999, "xr-user", "xr-password", tls_verify=False, monitor_error_stream=False)
         assert cm.Connect()
 
         constellation = cm.get_constellation_by_hub_name("XR HUB 1")
diff --git a/src/device/service/drivers/xr/cm/tf.py b/src/device/service/drivers/xr/cm/tf.py
index c44cb0c9f..0177346a0 100644
--- a/src/device/service/drivers/xr/cm/tf.py
+++ b/src/device/service/drivers/xr/cm/tf.py
@@ -15,7 +15,7 @@
 
 from typing import Dict, Union
 import logging
-from .cm_connection import CmConnection
+from .cm_connection import CmConnection, ExternalError
 from .constellation import Constellation
 from .tf_service import TFService
 from .transport_capacity import TransportCapacity
@@ -57,13 +57,17 @@ def set_config_for_service(cm_connection: CmConnection, constellation: Constella
                         LOGGER.error(f"set_config_for_service: Failed to create Transport Capacity ({desired_tc=})")
                         return False
         connection = Connection(from_tf_service=service)
-        href = cm_connection.create_or_update_connection(connection)
-        if href:
-            LOGGER.info(f"set_config_for_service: Created service {uuid} as {href} (connection={str(connection)})")
-            return True
-        else:
-            LOGGER.error(f"set_config_for_service: Service creation failure for {uuid} (connection={str(connection)})")
-            return False
+        try:
+            href = cm_connection.create_or_update_connection(connection)
+            if href:
+                LOGGER.info(f"set_config_for_service: Created service {uuid} as {href} (connection={str(connection)})")
+                return True
+            else:
+                LOGGER.error(f"set_config_for_service: Service creation failure for {uuid} (connection={str(connection)})")
+                return False
+        except ExternalError as e:
+            LOGGER.error(f"set_config_for_service: Service creation failure for {uuid} (connection={str(connection)}): {str(e)}")
+            return e
     # Intentionally catching all exceptions, as they are stored in a list as return values
     # by the caller
     # pylint: disable=broad-except
-- 
GitLab


From 670e9735b90f3fc6ed0fb2bb41388ddb1a115148 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Juan=20Pedre=C3=B1o=20Manresa?=
 <jpedrenomanresa@adva.com>
Date: Wed, 1 Mar 2023 14:30:20 +0000
Subject: [PATCH 192/229] Added copyright headers for all new files.

---
 .../nbi_plugins/ietf_network_slice/NSS_Service.py  |  2 +-
 .../nbi_plugins/ietf_network_slice/NSS_Services.py |  2 +-
 .../nbi_plugins/ietf_network_slice/__init__.py     |  2 +-
 .../ietf_network_slice/bindings/__init__.py        | 14 ++++++++++++++
 .../ietf_network_slice/bindings/nacm/__init__.py   | 14 ++++++++++++++
 .../bindings/nacm/groups/__init__.py               | 14 ++++++++++++++
 .../bindings/nacm/groups/group/__init__.py         | 14 ++++++++++++++
 .../bindings/nacm/rule_list/__init__.py            | 14 ++++++++++++++
 .../bindings/nacm/rule_list/rule/__init__.py       | 14 ++++++++++++++
 .../nacm/rule_list/rule/rule_type/__init__.py      | 14 ++++++++++++++
 .../rule_list/rule/rule_type/data_node/__init__.py | 14 ++++++++++++++
 .../rule/rule_type/notification/__init__.py        | 14 ++++++++++++++
 .../rule/rule_type/protocol_operation/__init__.py  | 14 ++++++++++++++
 .../bindings/network_slice_services/__init__.py    | 14 ++++++++++++++
 .../slice_service/__init__.py                      | 14 ++++++++++++++
 .../slice_service/connection_groups/__init__.py    | 14 ++++++++++++++
 .../connection_groups/connection_group/__init__.py | 14 ++++++++++++++
 .../connection_group_monitoring/__init__.py        | 14 ++++++++++++++
 .../connectivity_construct/__init__.py             | 14 ++++++++++++++
 .../connectivity_construct_monitoring/__init__.py  | 14 ++++++++++++++
 .../connectivity_construct_type/__init__.py        | 14 ++++++++++++++
 .../connectivity_construct_type/a2a/__init__.py    | 14 ++++++++++++++
 .../a2a/a2a_sdp/__init__.py                        | 14 ++++++++++++++
 .../a2a/a2a_sdp/slo_sle_policy/__init__.py         | 14 ++++++++++++++
 .../a2a/a2a_sdp/slo_sle_policy/custom/__init__.py  | 14 ++++++++++++++
 .../custom/service_slo_sle_policy/__init__.py      | 14 ++++++++++++++
 .../metric_bounds/__init__.py                      | 14 ++++++++++++++
 .../metric_bounds/metric_bound/__init__.py         | 14 ++++++++++++++
 .../steering_constraints/__init__.py               | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../service_function/__init__.py                   | 14 ++++++++++++++
 .../a2a_sdp/slo_sle_policy/standard/__init__.py    | 14 ++++++++++++++
 .../connectivity_construct_type/p2mp/__init__.py   | 14 ++++++++++++++
 .../connectivity_construct_type/p2p/__init__.py    | 14 ++++++++++++++
 .../slo_sle_policy/__init__.py                     | 14 ++++++++++++++
 .../slo_sle_policy/custom/__init__.py              | 14 ++++++++++++++
 .../custom/service_slo_sle_policy/__init__.py      | 14 ++++++++++++++
 .../metric_bounds/__init__.py                      | 14 ++++++++++++++
 .../metric_bounds/metric_bound/__init__.py         | 14 ++++++++++++++
 .../steering_constraints/__init__.py               | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../service_function/__init__.py                   | 14 ++++++++++++++
 .../slo_sle_policy/standard/__init__.py            | 14 ++++++++++++++
 .../connection_group/slo_sle_policy/__init__.py    | 14 ++++++++++++++
 .../slo_sle_policy/custom/__init__.py              | 14 ++++++++++++++
 .../custom/service_slo_sle_policy/__init__.py      | 14 ++++++++++++++
 .../metric_bounds/__init__.py                      | 14 ++++++++++++++
 .../metric_bounds/metric_bound/__init__.py         | 14 ++++++++++++++
 .../steering_constraints/__init__.py               | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../service_function/__init__.py                   | 14 ++++++++++++++
 .../slo_sle_policy/standard/__init__.py            | 14 ++++++++++++++
 .../slice_service/sdps/__init__.py                 | 14 ++++++++++++++
 .../slice_service/sdps/sdp/__init__.py             | 14 ++++++++++++++
 .../sdps/sdp/attachment_circuits/__init__.py       | 14 ++++++++++++++
 .../attachment_circuit/__init__.py                 | 14 ++++++++++++++
 .../attachment_circuit/ac_tags/__init__.py         | 14 ++++++++++++++
 .../ac_tags/ac_tag_opaque/__init__.py              | 14 ++++++++++++++
 .../attachment_circuit/ac_tags/ac_tags/__init__.py | 14 ++++++++++++++
 .../incoming_qos_policy/__init__.py                | 14 ++++++++++++++
 .../incoming_qos_policy/rate_limits/__init__.py    | 14 ++++++++++++++
 .../outgoing_qos_policy/__init__.py                | 14 ++++++++++++++
 .../outgoing_qos_policy/rate_limits/__init__.py    | 14 ++++++++++++++
 .../attachment_circuit/sdp_peering/__init__.py     | 14 ++++++++++++++
 .../sdp_peering/opaque/__init__.py                 | 14 ++++++++++++++
 .../sdp_peering/protocol/__init__.py               | 14 ++++++++++++++
 .../sdp_peering/protocol/attribute/__init__.py     | 14 ++++++++++++++
 .../sdps/sdp/incoming_qos_policy/__init__.py       | 14 ++++++++++++++
 .../incoming_qos_policy/rate_limits/__init__.py    | 14 ++++++++++++++
 .../slice_service/sdps/sdp/location/__init__.py    | 14 ++++++++++++++
 .../sdps/sdp/outgoing_qos_policy/__init__.py       | 14 ++++++++++++++
 .../outgoing_qos_policy/rate_limits/__init__.py    | 14 ++++++++++++++
 .../sdps/sdp/sdp_monitoring/__init__.py            | 14 ++++++++++++++
 .../slice_service/sdps/sdp/sdp_peering/__init__.py | 14 ++++++++++++++
 .../sdps/sdp/sdp_peering/opaque/__init__.py        | 14 ++++++++++++++
 .../sdps/sdp/sdp_peering/protocol/__init__.py      | 14 ++++++++++++++
 .../sdp/sdp_peering/protocol/attribute/__init__.py | 14 ++++++++++++++
 .../sdps/sdp/service_match_criteria/__init__.py    | 14 ++++++++++++++
 .../match_criterion/__init__.py                    | 14 ++++++++++++++
 .../slice_service/sdps/sdp/status/__init__.py      | 14 ++++++++++++++
 .../sdps/sdp/status/admin_status/__init__.py       | 14 ++++++++++++++
 .../sdps/sdp/status/oper_status/__init__.py        | 14 ++++++++++++++
 .../slice_service/service_tags/__init__.py         | 14 ++++++++++++++
 .../service_tags/tag_opaque/__init__.py            | 14 ++++++++++++++
 .../service_tags/tag_type/__init__.py              | 14 ++++++++++++++
 .../slice_service/slo_sle_policy/__init__.py       | 14 ++++++++++++++
 .../slo_sle_policy/custom/__init__.py              | 14 ++++++++++++++
 .../custom/service_slo_sle_policy/__init__.py      | 14 ++++++++++++++
 .../metric_bounds/__init__.py                      | 14 ++++++++++++++
 .../metric_bounds/metric_bound/__init__.py         | 14 ++++++++++++++
 .../steering_constraints/__init__.py               | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../service_function/__init__.py                   | 14 ++++++++++++++
 .../slo_sle_policy/standard/__init__.py            | 14 ++++++++++++++
 .../slice_service/status/__init__.py               | 14 ++++++++++++++
 .../slice_service/status/admin_status/__init__.py  | 14 ++++++++++++++
 .../slice_service/status/oper_status/__init__.py   | 14 ++++++++++++++
 .../te_topology_identifier/__init__.py             | 14 ++++++++++++++
 .../slo_sle_templates/__init__.py                  | 14 ++++++++++++++
 .../slo_sle_templates/slo_sle_template/__init__.py | 14 ++++++++++++++
 .../service_slo_sle_policy/__init__.py             | 14 ++++++++++++++
 .../metric_bounds/__init__.py                      | 14 ++++++++++++++
 .../metric_bounds/metric_bound/__init__.py         | 14 ++++++++++++++
 .../steering_constraints/__init__.py               | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../service_function/__init__.py                   | 14 ++++++++++++++
 .../bindings/networks/__init__.py                  | 14 ++++++++++++++
 .../bindings/networks/network/__init__.py          | 14 ++++++++++++++
 .../bindings/networks/network/link/__init__.py     | 14 ++++++++++++++
 .../networks/network/link/destination/__init__.py  | 14 ++++++++++++++
 .../networks/network/link/source/__init__.py       | 14 ++++++++++++++
 .../network/link/supporting_link/__init__.py       | 14 ++++++++++++++
 .../bindings/networks/network/link/te/__init__.py  | 14 ++++++++++++++
 .../network/link/te/bundle_stack_level/__init__.py | 14 ++++++++++++++
 .../link/te/bundle_stack_level/bundle/__init__.py  | 14 ++++++++++++++
 .../bundle/bundled_links/__init__.py               | 14 ++++++++++++++
 .../bundle/bundled_links/bundled_link/__init__.py  | 14 ++++++++++++++
 .../te/bundle_stack_level/component/__init__.py    | 14 ++++++++++++++
 .../component/component_links/__init__.py          | 14 ++++++++++++++
 .../component_links/component_link/__init__.py     | 14 ++++++++++++++
 .../link/te/information_source_entry/__init__.py   | 14 ++++++++++++++
 .../information_source_state/__init__.py           | 14 ++++++++++++++
 .../information_source_state/topology/__init__.py  | 14 ++++++++++++++
 .../interface_switching_capability/__init__.py     | 14 ++++++++++++++
 .../max_lsp_bandwidth/__init__.py                  | 14 ++++++++++++++
 .../max_lsp_bandwidth/te_bandwidth/__init__.py     | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../label_restrictions/__init__.py                 | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../max_link_bandwidth/__init__.py                 | 14 ++++++++++++++
 .../max_link_bandwidth/te_bandwidth/__init__.py    | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../max_resv_link_bandwidth/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/__init__.py                       | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../information_source_entry/te_nsrlgs/__init__.py | 14 ++++++++++++++
 .../information_source_entry/te_srlgs/__init__.py  | 14 ++++++++++++++
 .../unreserved_bandwidth/__init__.py               | 14 ++++++++++++++
 .../unreserved_bandwidth/te_bandwidth/__init__.py  | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../link/te/information_source_state/__init__.py   | 14 ++++++++++++++
 .../information_source_state/topology/__init__.py  | 14 ++++++++++++++
 .../networks/network/link/te/recovery/__init__.py  | 14 ++++++++++++++
 .../network/link/te/statistics/__init__.py         | 14 ++++++++++++++
 .../network/link/te/te_link_attributes/__init__.py | 14 ++++++++++++++
 .../te_link_attributes/external_domain/__init__.py | 14 ++++++++++++++
 .../interface_switching_capability/__init__.py     | 14 ++++++++++++++
 .../max_lsp_bandwidth/__init__.py                  | 14 ++++++++++++++
 .../max_lsp_bandwidth/te_bandwidth/__init__.py     | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../label_restrictions/__init__.py                 | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../max_link_bandwidth/__init__.py                 | 14 ++++++++++++++
 .../max_link_bandwidth/te_bandwidth/__init__.py    | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../max_resv_link_bandwidth/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/__init__.py                       | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../te/te_link_attributes/te_nsrlgs/__init__.py    | 14 ++++++++++++++
 .../te/te_link_attributes/te_srlgs/__init__.py     | 14 ++++++++++++++
 .../te/te_link_attributes/underlay/__init__.py     | 14 ++++++++++++++
 .../underlay/backup_path/__init__.py               | 14 ++++++++++++++
 .../underlay/backup_path/path_element/__init__.py  | 14 ++++++++++++++
 .../backup_path/path_element/type/__init__.py      | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/primary_path/__init__.py              | 14 ++++++++++++++
 .../underlay/primary_path/path_element/__init__.py | 14 ++++++++++++++
 .../primary_path/path_element/type/__init__.py     | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/tunnel_termination_points/__init__.py | 14 ++++++++++++++
 .../underlay/tunnels/__init__.py                   | 14 ++++++++++++++
 .../underlay/tunnels/tunnel/__init__.py            | 14 ++++++++++++++
 .../unreserved_bandwidth/__init__.py               | 14 ++++++++++++++
 .../unreserved_bandwidth/te_bandwidth/__init__.py  | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../networks/network/link/te/underlay/__init__.py  | 14 ++++++++++++++
 .../networks/network/network_types/__init__.py     | 14 ++++++++++++++
 .../network/network_types/te_topology/__init__.py  | 14 ++++++++++++++
 .../bindings/networks/network/node/__init__.py     | 14 ++++++++++++++
 .../network/node/supporting_node/__init__.py       | 14 ++++++++++++++
 .../bindings/networks/network/node/te/__init__.py  | 14 ++++++++++++++
 .../network/node/te/geolocation/__init__.py        | 14 ++++++++++++++
 .../node/te/information_source_entry/__init__.py   | 14 ++++++++++++++
 .../connectivity_matrices/__init__.py              | 14 ++++++++++++++
 .../connectivity_matrix/__init__.py                | 14 ++++++++++++++
 .../connectivity_matrix/from/__init__.py           | 14 ++++++++++++++
 .../from/label_restrictions/__init__.py            | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../connectivity_matrix/optimizations/__init__.py  | 14 ++++++++++++++
 .../optimizations/algorithm/__init__.py            | 14 ++++++++++++++
 .../optimizations/algorithm/metric/__init__.py     | 14 ++++++++++++++
 .../metric/optimization_metric/__init__.py         | 14 ++++++++++++++
 .../explicit_route_exclude_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_exclude_object/__init__.py        | 14 ++++++++++++++
 .../route_object_exclude_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/srlg/__init__.py                          | 14 ++++++++++++++
 .../type/srlg/srlg/__init__.py                     | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../explicit_route_include_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_include_object/__init__.py        | 14 ++++++++++++++
 .../route_object_include_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../algorithm/metric/tiebreakers/__init__.py       | 14 ++++++++++++++
 .../metric/tiebreakers/tiebreaker/__init__.py      | 14 ++++++++++++++
 .../algorithm/objective_function/__init__.py       | 14 ++++++++++++++
 .../objective_function/__init__.py                 | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_metric_bounds/__init__.py                 | 14 ++++++++++++++
 .../path_metric_bound/__init__.py                  | 14 ++++++++++++++
 .../path_constraints/path_srlgs_lists/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_constraints/path_srlgs_names/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../path_constraints/te_bandwidth/__init__.py      | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../path_properties/__init__.py                    | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_metric/__init__.py        | 14 ++++++++++++++
 .../path_properties/path_route_objects/__init__.py | 14 ++++++++++++++
 .../path_route_object/__init__.py                  | 14 ++++++++++++++
 .../path_route_object/type/__init__.py             | 14 ++++++++++++++
 .../path_route_object/type/as_number/__init__.py   | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_route_object/type/label/__init__.py       | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../path_properties/path_srlgs_lists/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_srlgs_names/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../connectivity_matrix/to/__init__.py             | 14 ++++++++++++++
 .../to/label_restrictions/__init__.py              | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../connectivity_matrix/underlay/__init__.py       | 14 ++++++++++++++
 .../underlay/backup_path/__init__.py               | 14 ++++++++++++++
 .../underlay/backup_path/path_element/__init__.py  | 14 ++++++++++++++
 .../backup_path/path_element/type/__init__.py      | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/primary_path/__init__.py              | 14 ++++++++++++++
 .../underlay/primary_path/path_element/__init__.py | 14 ++++++++++++++
 .../primary_path/path_element/type/__init__.py     | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/tunnel_termination_points/__init__.py | 14 ++++++++++++++
 .../underlay/tunnels/__init__.py                   | 14 ++++++++++++++
 .../underlay/tunnels/tunnel/__init__.py            | 14 ++++++++++++++
 .../label_restrictions/__init__.py                 | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../optimizations/__init__.py                      | 14 ++++++++++++++
 .../optimizations/algorithm/__init__.py            | 14 ++++++++++++++
 .../optimizations/algorithm/metric/__init__.py     | 14 ++++++++++++++
 .../metric/optimization_metric/__init__.py         | 14 ++++++++++++++
 .../explicit_route_exclude_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_exclude_object/__init__.py        | 14 ++++++++++++++
 .../route_object_exclude_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/srlg/__init__.py                          | 14 ++++++++++++++
 .../type/srlg/srlg/__init__.py                     | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../explicit_route_include_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_include_object/__init__.py        | 14 ++++++++++++++
 .../route_object_include_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../algorithm/metric/tiebreakers/__init__.py       | 14 ++++++++++++++
 .../metric/tiebreakers/tiebreaker/__init__.py      | 14 ++++++++++++++
 .../algorithm/objective_function/__init__.py       | 14 ++++++++++++++
 .../objective_function/__init__.py                 | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_metric_bounds/__init__.py                 | 14 ++++++++++++++
 .../path_metric_bound/__init__.py                  | 14 ++++++++++++++
 .../path_constraints/path_srlgs_lists/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_constraints/path_srlgs_names/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../path_constraints/te_bandwidth/__init__.py      | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../path_properties/__init__.py                    | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_metric/__init__.py        | 14 ++++++++++++++
 .../path_properties/path_route_objects/__init__.py | 14 ++++++++++++++
 .../path_route_object/__init__.py                  | 14 ++++++++++++++
 .../path_route_object/type/__init__.py             | 14 ++++++++++++++
 .../path_route_object/type/as_number/__init__.py   | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_route_object/type/label/__init__.py       | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../path_properties/path_srlgs_lists/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_srlgs_names/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../connectivity_matrices/underlay/__init__.py     | 14 ++++++++++++++
 .../underlay/backup_path/__init__.py               | 14 ++++++++++++++
 .../underlay/backup_path/path_element/__init__.py  | 14 ++++++++++++++
 .../backup_path/path_element/type/__init__.py      | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/primary_path/__init__.py              | 14 ++++++++++++++
 .../underlay/primary_path/path_element/__init__.py | 14 ++++++++++++++
 .../primary_path/path_element/type/__init__.py     | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/tunnel_termination_points/__init__.py | 14 ++++++++++++++
 .../underlay/tunnels/__init__.py                   | 14 ++++++++++++++
 .../underlay/tunnels/tunnel/__init__.py            | 14 ++++++++++++++
 .../information_source_state/__init__.py           | 14 ++++++++++++++
 .../information_source_state/topology/__init__.py  | 14 ++++++++++++++
 .../underlay_topology/__init__.py                  | 14 ++++++++++++++
 .../node/te/information_source_state/__init__.py   | 14 ++++++++++++++
 .../information_source_state/topology/__init__.py  | 14 ++++++++++++++
 .../network/node/te/statistics/__init__.py         | 14 ++++++++++++++
 .../connectivity_matrix_entry/__init__.py          | 14 ++++++++++++++
 .../network/node/te/statistics/node/__init__.py    | 14 ++++++++++++++
 .../network/node/te/te_node_attributes/__init__.py | 14 ++++++++++++++
 .../connectivity_matrices/__init__.py              | 14 ++++++++++++++
 .../connectivity_matrix/__init__.py                | 14 ++++++++++++++
 .../connectivity_matrix/from/__init__.py           | 14 ++++++++++++++
 .../from/label_restrictions/__init__.py            | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../connectivity_matrix/optimizations/__init__.py  | 14 ++++++++++++++
 .../optimizations/algorithm/__init__.py            | 14 ++++++++++++++
 .../optimizations/algorithm/metric/__init__.py     | 14 ++++++++++++++
 .../metric/optimization_metric/__init__.py         | 14 ++++++++++++++
 .../explicit_route_exclude_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_exclude_object/__init__.py        | 14 ++++++++++++++
 .../route_object_exclude_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/srlg/__init__.py                          | 14 ++++++++++++++
 .../type/srlg/srlg/__init__.py                     | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../explicit_route_include_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_include_object/__init__.py        | 14 ++++++++++++++
 .../route_object_include_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../algorithm/metric/tiebreakers/__init__.py       | 14 ++++++++++++++
 .../metric/tiebreakers/tiebreaker/__init__.py      | 14 ++++++++++++++
 .../algorithm/objective_function/__init__.py       | 14 ++++++++++++++
 .../objective_function/__init__.py                 | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_metric_bounds/__init__.py                 | 14 ++++++++++++++
 .../path_metric_bound/__init__.py                  | 14 ++++++++++++++
 .../path_constraints/path_srlgs_lists/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_constraints/path_srlgs_names/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../path_constraints/te_bandwidth/__init__.py      | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../path_properties/__init__.py                    | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_metric/__init__.py        | 14 ++++++++++++++
 .../path_properties/path_route_objects/__init__.py | 14 ++++++++++++++
 .../path_route_object/__init__.py                  | 14 ++++++++++++++
 .../path_route_object/type/__init__.py             | 14 ++++++++++++++
 .../path_route_object/type/as_number/__init__.py   | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_route_object/type/label/__init__.py       | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../path_properties/path_srlgs_lists/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_srlgs_names/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../connectivity_matrix/to/__init__.py             | 14 ++++++++++++++
 .../to/label_restrictions/__init__.py              | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../connectivity_matrix/underlay/__init__.py       | 14 ++++++++++++++
 .../underlay/backup_path/__init__.py               | 14 ++++++++++++++
 .../underlay/backup_path/path_element/__init__.py  | 14 ++++++++++++++
 .../backup_path/path_element/type/__init__.py      | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/primary_path/__init__.py              | 14 ++++++++++++++
 .../underlay/primary_path/path_element/__init__.py | 14 ++++++++++++++
 .../primary_path/path_element/type/__init__.py     | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/tunnel_termination_points/__init__.py | 14 ++++++++++++++
 .../underlay/tunnels/__init__.py                   | 14 ++++++++++++++
 .../underlay/tunnels/tunnel/__init__.py            | 14 ++++++++++++++
 .../label_restrictions/__init__.py                 | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../optimizations/__init__.py                      | 14 ++++++++++++++
 .../optimizations/algorithm/__init__.py            | 14 ++++++++++++++
 .../optimizations/algorithm/metric/__init__.py     | 14 ++++++++++++++
 .../metric/optimization_metric/__init__.py         | 14 ++++++++++++++
 .../explicit_route_exclude_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_exclude_object/__init__.py        | 14 ++++++++++++++
 .../route_object_exclude_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/srlg/__init__.py                          | 14 ++++++++++++++
 .../type/srlg/srlg/__init__.py                     | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../explicit_route_include_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_include_object/__init__.py        | 14 ++++++++++++++
 .../route_object_include_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../algorithm/metric/tiebreakers/__init__.py       | 14 ++++++++++++++
 .../metric/tiebreakers/tiebreaker/__init__.py      | 14 ++++++++++++++
 .../algorithm/objective_function/__init__.py       | 14 ++++++++++++++
 .../objective_function/__init__.py                 | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_metric_bounds/__init__.py                 | 14 ++++++++++++++
 .../path_metric_bound/__init__.py                  | 14 ++++++++++++++
 .../path_constraints/path_srlgs_lists/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_constraints/path_srlgs_names/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../path_constraints/te_bandwidth/__init__.py      | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../path_properties/__init__.py                    | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_metric/__init__.py        | 14 ++++++++++++++
 .../path_properties/path_route_objects/__init__.py | 14 ++++++++++++++
 .../path_route_object/__init__.py                  | 14 ++++++++++++++
 .../path_route_object/type/__init__.py             | 14 ++++++++++++++
 .../path_route_object/type/as_number/__init__.py   | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_route_object/type/label/__init__.py       | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../path_properties/path_srlgs_lists/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_srlgs_names/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../connectivity_matrices/underlay/__init__.py     | 14 ++++++++++++++
 .../underlay/backup_path/__init__.py               | 14 ++++++++++++++
 .../underlay/backup_path/path_element/__init__.py  | 14 ++++++++++++++
 .../backup_path/path_element/type/__init__.py      | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/primary_path/__init__.py              | 14 ++++++++++++++
 .../underlay/primary_path/path_element/__init__.py | 14 ++++++++++++++
 .../primary_path/path_element/type/__init__.py     | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/tunnel_termination_points/__init__.py | 14 ++++++++++++++
 .../underlay/tunnels/__init__.py                   | 14 ++++++++++++++
 .../underlay/tunnels/tunnel/__init__.py            | 14 ++++++++++++++
 .../underlay_topology/__init__.py                  | 14 ++++++++++++++
 .../node/te/tunnel_termination_point/__init__.py   | 14 ++++++++++++++
 .../client_layer_adaptation/__init__.py            | 14 ++++++++++++++
 .../switching_capability/__init__.py               | 14 ++++++++++++++
 .../switching_capability/te_bandwidth/__init__.py  | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../geolocation/__init__.py                        | 14 ++++++++++++++
 .../local_link_connectivities/__init__.py          | 14 ++++++++++++++
 .../label_restrictions/__init__.py                 | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../local_link_connectivity/__init__.py            | 14 ++++++++++++++
 .../label_restrictions/__init__.py                 | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../optimizations/__init__.py                      | 14 ++++++++++++++
 .../optimizations/algorithm/__init__.py            | 14 ++++++++++++++
 .../optimizations/algorithm/metric/__init__.py     | 14 ++++++++++++++
 .../metric/optimization_metric/__init__.py         | 14 ++++++++++++++
 .../explicit_route_exclude_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_exclude_object/__init__.py        | 14 ++++++++++++++
 .../route_object_exclude_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/srlg/__init__.py                          | 14 ++++++++++++++
 .../type/srlg/srlg/__init__.py                     | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../explicit_route_include_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_include_object/__init__.py        | 14 ++++++++++++++
 .../route_object_include_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../algorithm/metric/tiebreakers/__init__.py       | 14 ++++++++++++++
 .../metric/tiebreakers/tiebreaker/__init__.py      | 14 ++++++++++++++
 .../algorithm/objective_function/__init__.py       | 14 ++++++++++++++
 .../objective_function/__init__.py                 | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_metric_bounds/__init__.py                 | 14 ++++++++++++++
 .../path_metric_bound/__init__.py                  | 14 ++++++++++++++
 .../path_constraints/path_srlgs_lists/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_constraints/path_srlgs_names/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../path_constraints/te_bandwidth/__init__.py      | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../path_properties/__init__.py                    | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_metric/__init__.py        | 14 ++++++++++++++
 .../path_properties/path_route_objects/__init__.py | 14 ++++++++++++++
 .../path_route_object/__init__.py                  | 14 ++++++++++++++
 .../path_route_object/type/__init__.py             | 14 ++++++++++++++
 .../path_route_object/type/as_number/__init__.py   | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_route_object/type/label/__init__.py       | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../path_properties/path_srlgs_lists/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_srlgs_names/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../local_link_connectivity/underlay/__init__.py   | 14 ++++++++++++++
 .../underlay/backup_path/__init__.py               | 14 ++++++++++++++
 .../underlay/backup_path/path_element/__init__.py  | 14 ++++++++++++++
 .../backup_path/path_element/type/__init__.py      | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/primary_path/__init__.py              | 14 ++++++++++++++
 .../underlay/primary_path/path_element/__init__.py | 14 ++++++++++++++
 .../primary_path/path_element/type/__init__.py     | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/tunnel_termination_points/__init__.py | 14 ++++++++++++++
 .../underlay/tunnels/__init__.py                   | 14 ++++++++++++++
 .../underlay/tunnels/tunnel/__init__.py            | 14 ++++++++++++++
 .../optimizations/__init__.py                      | 14 ++++++++++++++
 .../optimizations/algorithm/__init__.py            | 14 ++++++++++++++
 .../optimizations/algorithm/metric/__init__.py     | 14 ++++++++++++++
 .../metric/optimization_metric/__init__.py         | 14 ++++++++++++++
 .../explicit_route_exclude_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_exclude_object/__init__.py        | 14 ++++++++++++++
 .../route_object_exclude_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/srlg/__init__.py                          | 14 ++++++++++++++
 .../type/srlg/srlg/__init__.py                     | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../explicit_route_include_objects/__init__.py     | 14 ++++++++++++++
 .../route_object_include_object/__init__.py        | 14 ++++++++++++++
 .../route_object_include_object/type/__init__.py   | 14 ++++++++++++++
 .../type/as_number/__init__.py                     | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../type/label/__init__.py                         | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../algorithm/metric/tiebreakers/__init__.py       | 14 ++++++++++++++
 .../metric/tiebreakers/tiebreaker/__init__.py      | 14 ++++++++++++++
 .../algorithm/objective_function/__init__.py       | 14 ++++++++++++++
 .../objective_function/__init__.py                 | 14 ++++++++++++++
 .../path_constraints/__init__.py                   | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_metric_bounds/__init__.py                 | 14 ++++++++++++++
 .../path_metric_bound/__init__.py                  | 14 ++++++++++++++
 .../path_constraints/path_srlgs_lists/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_constraints/path_srlgs_names/__init__.py  | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../path_constraints/te_bandwidth/__init__.py      | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../path_properties/__init__.py                    | 14 ++++++++++++++
 .../path_affinities_values/__init__.py             | 14 ++++++++++++++
 .../path_affinities_value/__init__.py              | 14 ++++++++++++++
 .../path_affinity_names/__init__.py                | 14 ++++++++++++++
 .../path_affinity_name/__init__.py                 | 14 ++++++++++++++
 .../path_affinity_name/affinity_name/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_metric/__init__.py        | 14 ++++++++++++++
 .../path_properties/path_route_objects/__init__.py | 14 ++++++++++++++
 .../path_route_object/__init__.py                  | 14 ++++++++++++++
 .../path_route_object/type/__init__.py             | 14 ++++++++++++++
 .../path_route_object/type/as_number/__init__.py   | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_route_object/type/label/__init__.py       | 14 ++++++++++++++
 .../type/label/label_hop/__init__.py               | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../path_properties/path_srlgs_lists/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_lists/path_srlgs_list/__init__.py   | 14 ++++++++++++++
 .../path_properties/path_srlgs_names/__init__.py   | 14 ++++++++++++++
 .../path_srlgs_names/path_srlgs_name/__init__.py   | 14 ++++++++++++++
 .../local_link_connectivities/underlay/__init__.py | 14 ++++++++++++++
 .../underlay/backup_path/__init__.py               | 14 ++++++++++++++
 .../underlay/backup_path/path_element/__init__.py  | 14 ++++++++++++++
 .../backup_path/path_element/type/__init__.py      | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/primary_path/__init__.py              | 14 ++++++++++++++
 .../underlay/primary_path/path_element/__init__.py | 14 ++++++++++++++
 .../primary_path/path_element/type/__init__.py     | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/tunnel_termination_points/__init__.py | 14 ++++++++++++++
 .../underlay/tunnels/__init__.py                   | 14 ++++++++++++++
 .../underlay/tunnels/tunnel/__init__.py            | 14 ++++++++++++++
 .../statistics/__init__.py                         | 14 ++++++++++++++
 .../statistics/local_link_connectivity/__init__.py | 14 ++++++++++++++
 .../tunnel_termination_point/__init__.py           | 14 ++++++++++++++
 .../__init__.py                                    | 14 ++++++++++++++
 .../network/node/termination_point/__init__.py     | 14 ++++++++++++++
 .../supporting_termination_point/__init__.py       | 14 ++++++++++++++
 .../network/node/termination_point/te/__init__.py  | 14 ++++++++++++++
 .../termination_point/te/geolocation/__init__.py   | 14 ++++++++++++++
 .../te/interface_switching_capability/__init__.py  | 14 ++++++++++++++
 .../max_lsp_bandwidth/__init__.py                  | 14 ++++++++++++++
 .../max_lsp_bandwidth/te_bandwidth/__init__.py     | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../network/supporting_network/__init__.py         | 14 ++++++++++++++
 .../bindings/networks/network/te/__init__.py       | 14 ++++++++++++++
 .../networks/network/te/geolocation/__init__.py    | 14 ++++++++++++++
 .../bindings/networks/network/te/nsrlg/__init__.py | 14 ++++++++++++++
 .../network/te_topology_identifier/__init__.py     | 14 ++++++++++++++
 .../bindings/networks/te/__init__.py               | 14 ++++++++++++++
 .../bindings/networks/te/templates/__init__.py     | 14 ++++++++++++++
 .../te/templates/link_template/__init__.py         | 14 ++++++++++++++
 .../link_template/te_link_attributes/__init__.py   | 14 ++++++++++++++
 .../te_link_attributes/external_domain/__init__.py | 14 ++++++++++++++
 .../interface_switching_capability/__init__.py     | 14 ++++++++++++++
 .../max_lsp_bandwidth/__init__.py                  | 14 ++++++++++++++
 .../max_lsp_bandwidth/te_bandwidth/__init__.py     | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../label_restrictions/__init__.py                 | 14 ++++++++++++++
 .../label_restriction/__init__.py                  | 14 ++++++++++++++
 .../label_restriction/label_end/__init__.py        | 14 ++++++++++++++
 .../label_end/te_label/__init__.py                 | 14 ++++++++++++++
 .../label_end/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_start/__init__.py      | 14 ++++++++++++++
 .../label_start/te_label/__init__.py               | 14 ++++++++++++++
 .../label_start/te_label/technology/__init__.py    | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../label_restriction/label_step/__init__.py       | 14 ++++++++++++++
 .../label_step/technology/__init__.py              | 14 ++++++++++++++
 .../label_step/technology/generic/__init__.py      | 14 ++++++++++++++
 .../max_link_bandwidth/__init__.py                 | 14 ++++++++++++++
 .../max_link_bandwidth/te_bandwidth/__init__.py    | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../max_resv_link_bandwidth/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/__init__.py                       | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../te_link_attributes/te_nsrlgs/__init__.py       | 14 ++++++++++++++
 .../te_link_attributes/te_srlgs/__init__.py        | 14 ++++++++++++++
 .../te_link_attributes/underlay/__init__.py        | 14 ++++++++++++++
 .../underlay/backup_path/__init__.py               | 14 ++++++++++++++
 .../underlay/backup_path/path_element/__init__.py  | 14 ++++++++++++++
 .../backup_path/path_element/type/__init__.py      | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/primary_path/__init__.py              | 14 ++++++++++++++
 .../underlay/primary_path/path_element/__init__.py | 14 ++++++++++++++
 .../primary_path/path_element/type/__init__.py     | 14 ++++++++++++++
 .../path_element/type/as_number/__init__.py        | 14 ++++++++++++++
 .../type/as_number/as_number_hop/__init__.py       | 14 ++++++++++++++
 .../path_element/type/label/__init__.py            | 14 ++++++++++++++
 .../path_element/type/label/label_hop/__init__.py  | 14 ++++++++++++++
 .../type/label/label_hop/te_label/__init__.py      | 14 ++++++++++++++
 .../label_hop/te_label/technology/__init__.py      | 14 ++++++++++++++
 .../te_label/technology/generic/__init__.py        | 14 ++++++++++++++
 .../type/numbered_link_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_link_hop/__init__.py                  | 14 ++++++++++++++
 .../type/numbered_node_hop/__init__.py             | 14 ++++++++++++++
 .../numbered_node_hop/__init__.py                  | 14 ++++++++++++++
 .../type/unnumbered_link_hop/__init__.py           | 14 ++++++++++++++
 .../unnumbered_link_hop/__init__.py                | 14 ++++++++++++++
 .../underlay/tunnel_termination_points/__init__.py | 14 ++++++++++++++
 .../underlay/tunnels/__init__.py                   | 14 ++++++++++++++
 .../underlay/tunnels/tunnel/__init__.py            | 14 ++++++++++++++
 .../unreserved_bandwidth/__init__.py               | 14 ++++++++++++++
 .../unreserved_bandwidth/te_bandwidth/__init__.py  | 14 ++++++++++++++
 .../te_bandwidth/technology/__init__.py            | 14 ++++++++++++++
 .../te_bandwidth/technology/generic/__init__.py    | 14 ++++++++++++++
 .../te/templates/node_template/__init__.py         | 14 ++++++++++++++
 .../node_template/te_node_attributes/__init__.py   | 14 ++++++++++++++
 .../underlay_topology/__init__.py                  | 14 ++++++++++++++
 .../ietf_network_slice/ofc23_batch_slices.py       | 14 ++++++++++++++
 1183 files changed, 16523 insertions(+), 3 deletions(-)

diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py
index f679ce654..f9b17c8b1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Service.py
@@ -1,4 +1,4 @@
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
index 8f4466694..72b09f2b7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/NSS_Services.py
@@ -1,4 +1,4 @@
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py
index 5b7ac27d5..c8aca124a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2021-2023 H2020 TeraFlow (https://www.teraflow-h2020.eu/)
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/__init__.py
index 752a51d6a..7a0c786e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 itertools import chain
 from typing import (
     Any, AnyStr, Dict, Iterator, List, Optional, Tuple, Type, Union)
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/__init__.py
index 9570bd4a1..c5a00cae7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/__init__.py
index 665898496..e95275ad8 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/group/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/group/__init__.py
index 1e696678f..c294bb266 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/group/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/groups/group/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/__init__.py
index b0a081874..dd0f9808e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py
index af4bdd592..4ec5ba06d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py
index 881c7f4b4..d470943c3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py
index 1e419b06b..4f7ddf138 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/data_node/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py
index 5e1302f83..ed2978418 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/notification/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py
index 969243ad3..1371c9edb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/nacm/rule_list/rule/rule_type/protocol_operation/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/__init__.py
index a77e29c3d..296b88092 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py
index 759b4cc1f..0e8520f1b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py
index 205111bea..a67fcd383 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py
index 4c75d553a..38302dd84 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py
index ea8073ef7..395aabd46 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connection_group_monitoring/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py
index 0155bb1ff..124ac4ddc 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py
index 372d1669c..bfca50ba9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_monitoring/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py
index a3a2a6a5c..6e1424075 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py
index b663825e8..1e9d402c2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py
index 4360ef981..fa176413b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py
index fc2bfad79..b239a65e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py
index b9b068fae..2d0c87599 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
index 4122e4f9e..afe092733 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
index a85354d58..85730b2d9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
index cc3656dc1..07832b8f3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
index d56e9e2c7..c308b8503 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
index a7b789063..d34f1d097 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
index 1b288e162..2593c301f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py
index 76d271ec0..46e20b734 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/a2a/a2a_sdp/slo_sle_policy/standard/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py
index bd5704163..26189213c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2mp/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py
index e2e2f66a2..5abb50263 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/connectivity_construct_type/p2p/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py
index fc2bfad79..b239a65e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py
index b9b068fae..2d0c87599 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
index 4122e4f9e..afe092733 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
index a85354d58..85730b2d9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
index a8bcf748b..32ab7d60c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
index 9678efc47..e2c022caf 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
index a7b789063..d34f1d097 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
index 1b288e162..2593c301f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py
index 76d271ec0..46e20b734 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/connectivity_construct/slo_sle_policy/standard/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py
index fc2bfad79..b239a65e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py
index b9b068fae..2d0c87599 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
index 7c7e41d56..ea6d366eb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
index a85354d58..85730b2d9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
index 64e586fa8..233749679 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
index 9678efc47..e2c022caf 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
index a7b789063..d34f1d097 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
index 1b288e162..2593c301f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py
index 76d271ec0..46e20b734 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/connection_groups/connection_group/slo_sle_policy/standard/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py
index 36ed8eda3..f3239d578 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py
index f606cde83..5fc0ff62c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py
index c0a13c6e8..624b09988 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py
index 714506d68..93194779e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py
index 94acd5265..a18ad45c1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py
index d0c7ce4f8..d56e82973 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tag_opaque/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py
index 3e07668ab..8ef753261 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/ac_tags/ac_tags/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py
index fb40100df..abad77461 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py
index b8c423c71..492759055 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/incoming_qos_policy/rate_limits/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py
index dd706e644..893cb264e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py
index 2b15a858a..445a7a5df 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/outgoing_qos_policy/rate_limits/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py
index d8fa62e25..c7b5e10b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py
index 4ef3c1735..b367227c3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/opaque/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py
index a119a7389..850f7d924 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py
index 4e98f0c5b..76180637c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/attachment_circuits/attachment_circuit/sdp_peering/protocol/attribute/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py
index fb40100df..abad77461 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py
index 0ac7522db..49a7b3dee 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/incoming_qos_policy/rate_limits/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py
index 4d44a9b84..a88123d6c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/location/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py
index dd706e644..893cb264e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py
index 61ca29b6e..fdf96f15c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/outgoing_qos_policy/rate_limits/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py
index cc281d83b..a65f09fc3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_monitoring/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py
index 7eff54fa2..d745437bd 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py
index 4ef3c1735..b367227c3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/opaque/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py
index a119a7389..850f7d924 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py
index 4e98f0c5b..76180637c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/sdp_peering/protocol/attribute/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py
index e284679b9..f39dc9971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py
index 5db2105c8..99d87b793 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/service_match_criteria/match_criterion/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py
index f70b5244e..f80218329 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py
index 1bb301fc8..f5581ef12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/admin_status/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py
index d9671f880..ab3508c5b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/sdps/sdp/status/oper_status/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py
index f7c6c5058..fceafd629 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py
index 0d77cefd7..d40d27cb7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_opaque/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py
index 91b434f3c..b4fff2c3b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/service_tags/tag_type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py
index fc2bfad79..b239a65e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py
index b9b068fae..2d0c87599 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
index 1ec026683..f20900d5b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
index a85354d58..85730b2d9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
index 8c7ebb304..0cd58260d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
index d56e9e2c7..c308b8503 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
index a7b789063..d34f1d097 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
index 1b288e162..2593c301f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/custom/service_slo_sle_policy/steering_constraints/service_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py
index 76d271ec0..46e20b734 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/slo_sle_policy/standard/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py
index 18698a183..b4239eb7d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py
index 1bb301fc8..f5581ef12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/admin_status/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py
index 78605ca6b..e69e53ef6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/status/oper_status/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py
index dd38fd30e..b76cce7a3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slice_service/te_topology_identifier/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py
index 91ee6d356..27cda6807 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py
index 14040092d..e97edc736 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py
index fbd08fb0b..6992f5bf7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py
index a85354d58..85730b2d9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
index c9d280dbe..2664a9278 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/metric_bounds/metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py
index 9678efc47..e2c022caf 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
index a7b789063..d34f1d097 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py
index 1b288e162..2593c301f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/network_slice_services/slo_sle_templates/slo_sle_template/service_slo_sle_policy/steering_constraints/service_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/__init__.py
index e16748839..55faa977b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/__init__.py
index 7fe387732..44952bf76 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/__init__.py
index 2ee04ebbf..3efc3e151 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/destination/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/destination/__init__.py
index ab2104894..387af3071 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/destination/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/destination/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/source/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/source/__init__.py
index 5c1f21e7e..f1ea95f11 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/source/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/source/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py
index a5802615c..dc99caa28 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/supporting_link/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/__init__.py
index 3e29b70cb..2fac1a941 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py
index 96d619746..225c39aa4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py
index 36e0165ad..2ac76501a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py
index 861168922..fc2b9edfb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py
index 3a628e325..8b10b2d45 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/bundle/bundled_links/bundled_link/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py
index de95dd7a0..b8cd4a237 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py
index ed1c0df5d..2dea8fc98 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py
index ef295d4c9..6195320b1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/bundle_stack_level/component/component_links/component_link/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py
index 02474d202..aacb98f85 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py
index 4c7d1b7e1..26d315f6a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py
index f855ca6c7..63598ce33 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/information_source_state/topology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py
index ae78596b0..42361e143 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py
index f4798990c..ddad298bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py
index eb255b295..1f85292e3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py
index c867501c5..8dbcffdce 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py
index 7105d2e36..92e8cf6bf 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py
index 82759cb75..e5e97fc16 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_nsrlgs/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py
index f4b20e2b0..561b31be8 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/te_srlgs/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py
index 1a56afee4..fd4e9d8a9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_entry/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py
index ed0ddce51..91fd095ce 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py
index f855ca6c7..63598ce33 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/information_source_state/topology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py
index 8a8ed9893..ecaf0b0c2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/recovery/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py
index 35985894c..08e82ba9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/statistics/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py
index c176b4065..706a755fa 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py
index cb20a2055..58a1d9d4d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/external_domain/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py
index ae78596b0..42361e143 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
index f4798990c..ddad298bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py
index f2c5781e4..4a396a20a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py
index c867501c5..8dbcffdce 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py
index 7105d2e36..92e8cf6bf 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py
index 82759cb75..e5e97fc16 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_nsrlgs/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py
index f4b20e2b0..561b31be8 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/te_srlgs/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py
index e53a6620d..9ef388cd6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py
index e171685ed..eee438314 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
index 124e1d8a7..95deb32ec 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index 2b93eb52c..1cb78075b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 8eeaf7fb4..652da89e6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py
index 234d5abd9..34a2a729c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
index e7036d182..e6792cd8e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index 112f1efd7..1abedb4d3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 53c58714d..2aa767b55 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py
index 77b2be0c6..c5cccf394 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnel_termination_points/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py
index 7de6a1597..303858f3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py
index 688794184..f854dfd32 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/underlay/tunnels/tunnel/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py
index 1a56afee4..fd4e9d8a9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py
index f7201dfed..ea01121d0 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/link/te/underlay/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/__init__.py
index 86e4afaf4..0fb174b74 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py
index 5166c5cb7..7d41731af 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/network_types/te_topology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/__init__.py
index cc378c4aa..c6a31d9a0 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py
index 39cd03606..abeb4a984 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/supporting_node/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/__init__.py
index 2e2b8f13b..2ad66ed99 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py
index 03acbb83b..5a631c355 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/geolocation/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py
index 56c0d3f21..21bfe84df 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py
index 690419c4e..08c000d9b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py
index 3e001f9b6..bc57f6204 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py
index d788deceb..14cbae730 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
index 375cab621..86c3a10ff 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
index 2b4686f49..21c8d4f4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
index d48108c45..9e0ca52a4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
index ba25f70a0..e7d1da8ee 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
index 1af0255d0..e0b3f85a0 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
index 533135c80..aea7bdd4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
index 5087d7cc0..405906d3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
index 395907423..e00223044 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index d1e221440..64a8ec6d5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
index 45158154d..420f996a1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
index 9fcacd871..95a1628e4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 53c58714d..2aa767b55 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
index 80379d1e5..3209b99ba 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
index eea621be3..c9f24330f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
index fd4790c46..99085dad5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index d149cb890..f2c993df5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 53c58714d..2aa767b55 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
index b4a935a13..d345b57b3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
index 46d26281e..500d880ad 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
index 0154fb6cb..cbd32a2bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
index 3fc193984..af72bcf27 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
index 252ce7377..b473367cc 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
index 3f9a52e85..d0e4a21b1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
index a27b60328..356f7761b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
index fc5cf4902..2a97d5e3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
index 51a66b728..76541b227 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
index 3f9a52e85..d0e4a21b1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
index 1bd538acf..d6ae07407 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
index 8510c6065..2af8eb3f4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
index ff6bafe2a..74b9e21c7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
index 47aec8c27..8bc2d82e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 0b962af7a..8d9d3d585 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index bb89d03ac..3a6876e61 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py
index 91479267b..d03118f5c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
index a075e7335..61cb67d4b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py
index 239e5c159..2feb9b8f1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
index e171685ed..eee438314 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
index 3eb16d3c3..077e86df0 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index d1e221440..64a8ec6d5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index c5173e59b..00c674167 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
index 234d5abd9..34a2a729c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
index 9a74c5dee..a2076e54c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index d149cb890..f2c993df5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 2c8c537d1..e568286bd 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
index 77b2be0c6..c5cccf394 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
index 7de6a1597..303858f3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
index 688794184..f854dfd32 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py
index 02d20d436..32c30d133 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py
index 2b4686f49..21c8d4f4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py
index ba8324e25..d82c7bf9c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py
index ba25f70a0..e7d1da8ee 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
index dc59c2850..bad2331fc 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
index 533135c80..aea7bdd4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
index 5087d7cc0..405906d3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
index 1cf6b0beb..8411b9056 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 70f0d19f5..8837ea16f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
index 45158154d..420f996a1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
index 9fcacd871..95a1628e4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 522417002..07c0b7b77 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
index 80379d1e5..3209b99ba 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
index eea621be3..c9f24330f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
index c1db5fae9..70317d31c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 112f1efd7..1abedb4d3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index ad0f8f928..aa5135a1a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
index b4a935a13..d345b57b3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
index 46d26281e..500d880ad 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
index 0154fb6cb..cbd32a2bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
index 3fc193984..af72bcf27 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py
index c5dceb474..b600b1aea 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
index cc269dd41..7560d7f51 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
index a27b60328..356f7761b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
index 27ce8642a..e6e72a44f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py
index 5291acf02..149786798 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
index cc269dd41..7560d7f51 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py
index af4359495..7645abedd 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py
index 8510c6065..2af8eb3f4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
index ff6bafe2a..74b9e21c7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
index a66e92d46..535505eea 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 112f1efd7..1abedb4d3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index ee39d102b..0f8e113b5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py
index 48105002a..ac722c47a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py
index e171685ed..eee438314 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
index f70f6e567..3762dccee 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index d149cb890..f2c993df5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index c5173e59b..00c674167 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py
index 234d5abd9..34a2a729c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
index b5331befc..d1ab68ff6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index 0b962af7a..8d9d3d585 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 1f748de94..c909481cb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
index 9ddffc52b..8ae8cc268 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py
index 7de6a1597..303858f3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
index fbf95428e..d36aa35ac 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py
index 4c7d1b7e1..26d315f6a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py
index 09a4a2ed7..9e09ccdff 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/information_source_state/topology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py
index 631b9eddf..42dee7a72 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_entry/underlay_topology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py
index bf8b0d899..6d2edeb71 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py
index 09a4a2ed7..9e09ccdff 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/information_source_state/topology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py
index 0ce936d9c..5c42b5a65 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py
index 6c05c5035..7ae31f705 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/connectivity_matrix_entry/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py
index 588fda1e5..c56ab2444 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/statistics/node/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py
index e3cc0b3b9..d34072811 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py
index e6ef3a744..b6cae8709 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py
index 011e5295b..caf8d26a9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py
index d788deceb..14cbae730 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
index bc116eea3..90d6fbfa8 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/from/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
index 2b4686f49..21c8d4f4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
index ba8324e25..d82c7bf9c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
index ba25f70a0..e7d1da8ee 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
index dc59c2850..bad2331fc 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
index 533135c80..aea7bdd4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
index 5087d7cc0..405906d3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
index 550df288f..8100bae93 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 0b962af7a..8d9d3d585 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
index 45158154d..420f996a1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
index 9fcacd871..95a1628e4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index f4c308608..7de25b7bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
index 80379d1e5..3209b99ba 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
index eea621be3..c9f24330f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
index 5c43beb22..5f251c42e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index d1e221440..64a8ec6d5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index f4c308608..7de25b7bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
index b4a935a13..d345b57b3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
index 46d26281e..500d880ad 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
index 0154fb6cb..cbd32a2bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
index 3fc193984..af72bcf27 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
index 6d49d1ebc..6f5aceab2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
index cc269dd41..7560d7f51 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
index a27b60328..356f7761b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
index fc5cf4902..2a97d5e3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
index 2c27bb1ae..df295258d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
index 3f9a52e85..d0e4a21b1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
index 1bd538acf..d6ae07407 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
index 8510c6065..2af8eb3f4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
index ff6bafe2a..74b9e21c7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
index 38a40e453..28ea603a0 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 2b93eb52c..1cb78075b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 8eeaf7fb4..652da89e6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py
index 91479267b..d03118f5c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
index 1ccbd9098..d6963852b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/to/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py
index 48105002a..ac722c47a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
index e29eefa2e..6b6e1ff5c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
index 04677ef47..39f656215 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index 2b93eb52c..1cb78075b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index f74d6bb05..17a8ab32f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
index 234d5abd9..34a2a729c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
index 3c41d60a4..e01f01986 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index d149cb890..f2c993df5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 8eeaf7fb4..652da89e6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
index 9ddffc52b..8ae8cc268 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnel_termination_points/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
index 7de6a1597..303858f3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
index 688794184..f854dfd32 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/connectivity_matrix/underlay/tunnels/tunnel/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py
index d095f70e7..832dd2f7e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py
index 2b4686f49..21c8d4f4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py
index ba8324e25..d82c7bf9c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py
index ba25f70a0..e7d1da8ee 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
index f556fe180..e5e69ea24 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
index 533135c80..aea7bdd4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
index 5087d7cc0..405906d3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
index 16264421e..519535f45 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index d149cb890..f2c993df5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
index 45158154d..420f996a1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
index 9fcacd871..95a1628e4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 4ed2982ea..cdc24c09f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
index 80379d1e5..3209b99ba 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
index eea621be3..c9f24330f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
index 65605663b..0fc658253 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index d149cb890..f2c993df5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 82d38d9f6..5baa996de 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
index b4a935a13..d345b57b3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
index 46d26281e..500d880ad 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
index 0154fb6cb..cbd32a2bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
index 3fc193984..af72bcf27 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py
index b768537b9..28191362a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
index cc269dd41..7560d7f51 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
index a27b60328..356f7761b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
index fc5cf4902..2a97d5e3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py
index 5291acf02..149786798 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
index 3f9a52e85..d0e4a21b1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py
index af4359495..7645abedd 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py
index 8510c6065..2af8eb3f4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
index ff6bafe2a..74b9e21c7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
index 5c43beb22..5f251c42e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 112f1efd7..1abedb4d3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 522417002..07c0b7b77 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py
index e53a6620d..9ef388cd6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py
index e29eefa2e..6b6e1ff5c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
index f2e61b714..e16cb666c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index 112f1efd7..1abedb4d3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 74f7c3b65..6c1142926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py
index 234d5abd9..34a2a729c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
index dc359f022..c00e57c23 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index 2b93eb52c..1cb78075b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 4a00a18c4..c8ee74a2b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
index 9ddffc52b..8ae8cc268 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnel_termination_points/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py
index 7de6a1597..303858f3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
index fbf95428e..d36aa35ac 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/connectivity_matrices/underlay/tunnels/tunnel/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py
index 631b9eddf..42dee7a72 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/te_node_attributes/underlay_topology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py
index 6e2c48c07..3a2840f25 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py
index b3b8c30c7..38f9ec314 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py
index ec358cae0..74c496e9c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/client_layer_adaptation/switching_capability/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py
index fb545052e..e58eb1516 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/geolocation/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py
index 931c32ebe..d107aca71 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py
index 9a3a45d56..814ea59a5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py
index 0687a2eba..89dc7a880 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py
index 2d9b171dd..1075ea148 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py
index 2b4686f49..21c8d4f4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py
index d48108c45..9e0ca52a4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py
index ba25f70a0..e7d1da8ee 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py
index f556fe180..e5e69ea24 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
index 533135c80..aea7bdd4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
index 5087d7cc0..405906d3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
index acfedad2f..d71309cbb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index d149cb890..f2c993df5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
index 45158154d..420f996a1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
index 9fcacd871..95a1628e4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 522417002..07c0b7b77 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
index 80379d1e5..3209b99ba 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
index eea621be3..c9f24330f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
index d1d032c9b..97c7b52d5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 0b962af7a..8d9d3d585 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 522417002..07c0b7b77 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py
index b4a935a13..d345b57b3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
index 46d26281e..500d880ad 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py
index 0154fb6cb..cbd32a2bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py
index 3fc193984..af72bcf27 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py
index 58692872d..4ffa7b66e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py
index cc269dd41..7560d7f51 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py
index a27b60328..356f7761b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
index 27ce8642a..e6e72a44f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py
index 51e92548f..bde8f98e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py
index cc269dd41..7560d7f51 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py
index af4359495..7645abedd 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py
index 8510c6065..2af8eb3f4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py
index ff6bafe2a..74b9e21c7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py
index 3b9014c93..ce99e420e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 112f1efd7..1abedb4d3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index f4c308608..7de25b7bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py
index c32671f5a..718667143 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py
index e29eefa2e..6b6e1ff5c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py
index b5331befc..d1ab68ff6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index d1e221440..64a8ec6d5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 819d8bf2a..1182654a4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py
index 234d5abd9..34a2a729c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py
index e523b1f45..2961e2bf8 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index 112f1efd7..1abedb4d3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 02ec705bb..088a2a9a5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py
index 9ddffc52b..8ae8cc268 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnel_termination_points/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py
index 7de6a1597..303858f3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py
index fbf95428e..d36aa35ac 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/local_link_connectivity/underlay/tunnels/tunnel/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py
index 2b4686f49..21c8d4f4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py
index d48108c45..9e0ca52a4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py
index ba25f70a0..e7d1da8ee 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py
index 1af0255d0..e0b3f85a0 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
index 533135c80..aea7bdd4c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
index 5087d7cc0..405906d3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
index 4921d43de..ef448f1cf 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 2b93eb52c..1cb78075b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
index 45158154d..420f996a1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
index 9fcacd871..95a1628e4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/srlg/srlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 4a00a18c4..c8ee74a2b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_exclude_objects/route_object_exclude_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
index 80379d1e5..3209b99ba 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
index eea621be3..c9f24330f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
index 8ed25be51..943ba0bd2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 2b93eb52c..1cb78075b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 16577714f..ad1ed06e7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/optimization_metric/explicit_route_include_objects/route_object_include_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py
index b4a935a13..d345b57b3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
index 46d26281e..500d880ad 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/metric/tiebreakers/tiebreaker/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py
index 0154fb6cb..cbd32a2bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py
index 3fc193984..af72bcf27 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/optimizations/algorithm/objective_function/objective_function/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py
index dfa72c588..c83cf0a2d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py
index 3f9a52e85..d0e4a21b1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py
index a27b60328..356f7761b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
index fc5cf4902..2a97d5e3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_metric_bounds/path_metric_bound/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_constraints/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py
index 94ac00e0d..41c96a46e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py
index 0364e6ebb..7c038ff21 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py
index cc269dd41..7560d7f51 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinities_values/path_affinities_value/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py
index e499d5b60..a8439d312 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py
index 65b1438eb..f56a19402 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
index bdd228e56..75d22895c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_affinity_names/path_affinity_name/affinity_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py
index 1bd538acf..d6ae07407 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_metric/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py
index 8510c6065..2af8eb3f4 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py
index ff6bafe2a..74b9e21c7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py
index 4be4cb23a..ba147c0c9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
index 2b93eb52c..1cb78075b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 2c8c537d1..e568286bd 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_route_objects/path_route_object/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py
index 759932917..5e807a0b2 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
index bceefdd63..631911d14 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_lists/path_srlgs_list/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py
index d7b6d3b75..54d85c0e5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
index a36618302..d9b66f186 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/path_properties/path_srlgs_names/path_srlgs_name/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py
index e53a6620d..9ef388cd6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py
index e29eefa2e..6b6e1ff5c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py
index 9c1d641e4..756916fe5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index 112f1efd7..1abedb4d3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 6ce8fe984..8b97fc02b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index bb89d03ac..3a6876e61 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py
index 234d5abd9..34a2a729c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py
index 94c37ba1c..dcd3c6917 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index d1e221440..64a8ec6d5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 82d38d9f6..5baa996de 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py
index 9ddffc52b..8ae8cc268 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnel_termination_points/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py
index 7de6a1597..303858f3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py
index 688794184..f854dfd32 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/local_link_connectivities/underlay/tunnels/tunnel/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py
index b774cba14..9ed869cac 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py
index c80778452..968aa5f22 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/local_link_connectivity/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py
index 1ab18c6ee..f0226e018 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/statistics/tunnel_termination_point/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py
index 91efbb782..6c49df484 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/te/tunnel_termination_point/supporting_tunnel_termination_point/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py
index e686a833d..c57b1997c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py
index 9420fd24e..677a83f1a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/supporting_termination_point/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py
index 49c006a63..01c6bcdf0 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py
index fb545052e..e58eb1516 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/geolocation/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py
index 1134290dc..aed5f69dc 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py
index f4798990c..ddad298bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/node/termination_point/te/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py
index 4e4733ec8..1edaacf9b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/supporting_network/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/__init__.py
index c905a103e..748195d4b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py
index 03acbb83b..5a631c355 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/geolocation/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py
index 7973bac66..ed5c7ab09 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te/nsrlg/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py
index 119595fb7..796099501 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/network/te_topology_identifier/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/__init__.py
index 343166900..e44025b20 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/__init__.py
index 61c9f483b..7445085d6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py
index 14aa5888e..643689502 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py
index 1932ab99e..8165170f1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py
index e3ff334dd..30e28c4c7 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/external_domain/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py
index 1134290dc..aed5f69dc 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
index f4798990c..ddad298bb 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/interface_switching_capability/max_lsp_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py
index ff5da78ac..29f30ca79 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py
index bb7e00b35..59861169c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
index 3bcaef67b..f2ad52577 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_end/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
index 7231b41a8..c8985523b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_start/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
index 41684bce0..7d3aeed12 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/label_restrictions/label_restriction/label_step/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py
index c867501c5..8dbcffdce 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py
index 7105d2e36..92e8cf6bf 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/max_resv_link_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py
index 82759cb75..e5e97fc16 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_nsrlgs/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py
index f4b20e2b0..561b31be8 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/te_srlgs/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py
index e53a6620d..9ef388cd6 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py
index e29eefa2e..6b6e1ff5c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
index f2e61b714..e16cb666c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
index ac12334a0..7fbc8696d 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index d149cb890..f2c993df5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 02ec705bb..088a2a9a5 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/backup_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py
index 234d5abd9..34a2a729c 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py
index 9e681fc47..1d5e7a062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
index 7fd000898..82e2d504a 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
index 4eaab7ed6..a9e6397e1 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
index b5045b4a6..3d4d7cc08 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/as_number/as_number_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
index e9c2b15b0..f3d584796 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
index 602865e1d..2203b9926 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
index c0fc62380..cbf308375 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/label/label_hop/te_label/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
index 0613a055a..75b0008fe 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
index 112f1efd7..1abedb4d3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_link_hop/numbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
index 1656e10d6..f0ceac062 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
index 94a4a11b9..b8413f971 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/numbered_node_hop/numbered_node_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
index 0e2dfd2bf..18213797f 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
index 4a00a18c4..c8ee74a2b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/primary_path/path_element/type/unnumbered_link_hop/unnumbered_link_hop/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py
index 77b2be0c6..c5cccf394 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnel_termination_points/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py
index 7de6a1597..303858f3e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py
index 688794184..f854dfd32 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/underlay/tunnels/tunnel/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py
index 1a56afee4..fd4e9d8a9 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
index e6ca6439a..21c93df9e 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
index c43a6ac16..b7c35cb35 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
index b418b17d4..81dce6de3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/link_template/te_link_attributes/unreserved_bandwidth/te_bandwidth/technology/generic/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py
index 4cb4a1de9..b2973312b 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final, Iterator, List, Tuple
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py
index f643d4e5f..d33037182 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py
index 631b9eddf..42dee7a72 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/bindings/networks/te/templates/node_template/te_node_attributes/underlay_topology/__init__.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT 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 typing import Dict, Final
 
 from .. import (
diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ofc23_batch_slices.py b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ofc23_batch_slices.py
index 0b307532e..c38d75d06 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ofc23_batch_slices.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_network_slice/ofc23_batch_slices.py
@@ -1,3 +1,17 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
 import json
 import random
 import uuid
-- 
GitLab


From 9bf07f64dee8ceb1b3789e93afd5cde612f25a37 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 18:31:24 +0000
Subject: [PATCH 193/229] OFC'23 demo:

- Created 2 sets of descriptors: real and emulated
- Updated real scenario settings
---
 .../{ => emulated}/dc-2-dc-service.json       |   0
 .../{ => emulated}/descriptor_child.json      |   0
 .../{ => emulated}/descriptor_parent.json     |   0
 .../descriptor_parent_noxr.json               |   0
 .../descriptors/real/dc-2-dc-service.json     |  37 +++
 .../descriptors/real/descriptor_child.json    |  93 +++++++
 .../descriptors/real/descriptor_parent.json   | 258 ++++++++++++++++++
 7 files changed, 388 insertions(+)
 rename src/tests/ofc23/descriptors/{ => emulated}/dc-2-dc-service.json (100%)
 rename src/tests/ofc23/descriptors/{ => emulated}/descriptor_child.json (100%)
 rename src/tests/ofc23/descriptors/{ => emulated}/descriptor_parent.json (100%)
 rename src/tests/ofc23/descriptors/{ => emulated}/descriptor_parent_noxr.json (100%)
 create mode 100644 src/tests/ofc23/descriptors/real/dc-2-dc-service.json
 create mode 100644 src/tests/ofc23/descriptors/real/descriptor_child.json
 create mode 100644 src/tests/ofc23/descriptors/real/descriptor_parent.json

diff --git a/src/tests/ofc23/descriptors/dc-2-dc-service.json b/src/tests/ofc23/descriptors/emulated/dc-2-dc-service.json
similarity index 100%
rename from src/tests/ofc23/descriptors/dc-2-dc-service.json
rename to src/tests/ofc23/descriptors/emulated/dc-2-dc-service.json
diff --git a/src/tests/ofc23/descriptors/descriptor_child.json b/src/tests/ofc23/descriptors/emulated/descriptor_child.json
similarity index 100%
rename from src/tests/ofc23/descriptors/descriptor_child.json
rename to src/tests/ofc23/descriptors/emulated/descriptor_child.json
diff --git a/src/tests/ofc23/descriptors/descriptor_parent.json b/src/tests/ofc23/descriptors/emulated/descriptor_parent.json
similarity index 100%
rename from src/tests/ofc23/descriptors/descriptor_parent.json
rename to src/tests/ofc23/descriptors/emulated/descriptor_parent.json
diff --git a/src/tests/ofc23/descriptors/descriptor_parent_noxr.json b/src/tests/ofc23/descriptors/emulated/descriptor_parent_noxr.json
similarity index 100%
rename from src/tests/ofc23/descriptors/descriptor_parent_noxr.json
rename to src/tests/ofc23/descriptors/emulated/descriptor_parent_noxr.json
diff --git a/src/tests/ofc23/descriptors/real/dc-2-dc-service.json b/src/tests/ofc23/descriptors/real/dc-2-dc-service.json
new file mode 100644
index 000000000..3a83afa6d
--- /dev/null
+++ b/src/tests/ofc23/descriptors/real/dc-2-dc-service.json
@@ -0,0 +1,37 @@
+{
+    "services": [
+        {
+            "service_id": {
+                "context_id": {"context_uuid": {"uuid": "admin"}}, "service_uuid": {"uuid": "dc-2-dc-svc"}
+            },
+            "service_type": 2,
+            "service_status": {"service_status": 1},
+            "service_endpoint_ids": [
+                {"device_id":{"device_uuid":{"uuid":"DC1"}},"endpoint_uuid":{"uuid":"int"}},
+                {"device_id":{"device_uuid":{"uuid":"DC2"}},"endpoint_uuid":{"uuid":"int"}}
+            ],
+            "service_constraints": [
+                {"sla_capacity": {"capacity_gbps": 10.0}},
+                {"sla_latency": {"e2e_latency_ms": 15.2}}
+            ],
+            "service_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "/settings", "resource_value": {
+                    "address_families": ["IPV4"], "bgp_as": 65000, "bgp_route_target": "65000:123",
+                    "mtu": 1512, "vlan_id": 111
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[R149]/endpoint[eth-1/0/22]/settings", "resource_value": {
+                    "route_distinguisher": "65000:123", "router_id": "5.5.5.5",
+                    "address_ip": "172.16.4.1", "address_prefix": 24, "sub_interface_index": 0, "vlan_id": 111
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[R155]/endpoint[eth-1/0/22]/settings", "resource_value": {
+                    "route_distinguisher": "65000:123", "router_id": "5.5.5.1",
+                    "address_ip": "172.16.2.1", "address_prefix": 24, "sub_interface_index": 0, "vlan_id": 111
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[R199]/endpoint[eth-1/0/21]/settings", "resource_value": {
+                    "route_distinguisher": "65000:123", "router_id": "5.5.5.6",
+                    "address_ip": "172.16.1.1", "address_prefix": 24, "sub_interface_index": 0, "vlan_id": 111
+                }}}
+            ]}
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/real/descriptor_child.json b/src/tests/ofc23/descriptors/real/descriptor_child.json
new file mode 100644
index 000000000..aa6d7bbd1
--- /dev/null
+++ b/src/tests/ofc23/descriptors/real/descriptor_child.json
@@ -0,0 +1,93 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "R199"}}, "device_type": "packet-router", "device_drivers": [1],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.95.86.199"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "830"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin",
+                    "force_running": false, "hostkey_verify": false, "look_for_keys": false,
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "huaweiyang"},
+                    "manager_params": {"timeout" : 120}
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R149"}}, "device_type": "packet-router", "device_drivers": [1],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.95.86.149"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "830"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin",
+                    "force_running": false, "hostkey_verify": false, "look_for_keys": false,
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "huaweiyang"},
+                    "manager_params": {"timeout" : 120}
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R155"}}, "device_type": "packet-router", "device_drivers": [1],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.95.86.155"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "830"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin",
+                    "force_running": false, "hostkey_verify": false, "look_for_keys": false,
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "huaweiyang"},
+                    "manager_params": {"timeout" : 120}
+                }}}
+            ]}
+        }
+    ],
+    "links": [
+        {
+            "link_id": {"link_uuid": {"uuid": "R199/eth-1/0/19==R155/eth-1/0/19"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/19"}},
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/19"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R155/eth-1/0/19==R199/eth-1/0/19"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/19"}},
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/19"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R199/eth-1/0/20==R149/eth-1/0/20"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}},
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R149/eth-1/0/20==R199/eth-1/0/20"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}},
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R149/eth-1/0/25==R155/eth-1/0/25"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}},
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R155/eth-1/0/25==R149/eth-1/0/25"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}},
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}}
+            ]
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/real/descriptor_parent.json b/src/tests/ofc23/descriptors/real/descriptor_parent.json
new file mode 100644
index 000000000..3317d46ed
--- /dev/null
+++ b/src/tests/ofc23/descriptors/real/descriptor_parent.json
@@ -0,0 +1,258 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "TFS-IP"}}, "device_type": "teraflowsdn", "device_drivers": [7],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8002"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "scheme": "http", "username": "admin", "password": "admin"
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "MW"}}, "device_type": "microwave-radio-system", "device_drivers": [4, 5],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "192.168.27.136"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8443"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "nms5ux", "password": "nms5ux", "timeout": 120, "scheme": "https",
+                    "node_ids": ["192.168.27.139", "192.168.27.140"]
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "OLS"}}, "device_type": "open-line-system", "device_drivers": [2],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "cttc-ols.cttc-ols.svc.cluster.local"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "4900"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"timeout": 120}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "IPM"}}, "device_type": "xr-constellation", "device_drivers": [6],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.95.86.126"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "443"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "xr-user-1", "password": "xr-user-1", "hub_module_name": "OFC HUB 1",
+                    "consistency-mode": "lifecycle", "import_topology": "devices"
+                }}}
+            ]}
+        },
+
+
+        {
+            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "device_type": "emu-optical-splitter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "optical/internal", "uuid": "common"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf1"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf2"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf3"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf4"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "DC2"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        }
+    ],
+    "links": [
+        {
+            "link_id": {"link_uuid": {"uuid": "DC1/eth1==R149/eth-1/0/22"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R149/eth-1/0/22==DC1/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}},
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R149/eth-1/0/9==MW/192.168.27.140:5"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/9"}},
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.140:5"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "MW/192.168.27.140:5==R149/eth-1/0/9"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.140:5"}},
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/9"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "MW/192.168.27.139:5==OFC HUB 1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.139:5"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/1/1==MW/192.168.27.139:5"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.139:5"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/XR-T1==Optical-Splitter/common"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "common"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/common==OFC HUB 1/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "common"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/leaf1==OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "aade6001-f00b-5e2f-a357-6a0a9d3de870"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/79516f5e-55a0-5671-977a-1f5cc934e700==Optical-Splitter/leaf1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "79516f5e-55a0-5671-977a-1f5cc934e700"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/leaf2==OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf2"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/30d9323e-b916-51ce-a9a8-cf88f62eb77f==Optical-Splitter/leaf2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "30d9323e-b916-51ce-a9a8-cf88f62eb77f"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 1/XR-T1==OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/68ac012e-54d4-5846-b5dc-6ec356404f90==OFC LEAF 1/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "68ac012e-54d4-5846-b5dc-6ec356404f90"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 2/XR-T1==OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/367b19b1-3172-54d8-bdd4-12d3ac5604f6==OFC LEAF 2/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "367b19b1-3172-54d8-bdd4-12d3ac5604f6"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 1/1/1==R155/eth-1/0/25"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R155/eth-1/0/25==OFC LEAF 1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 2/1/1==R199/eth-1/0/20"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R199/eth-1/0/20==OFC LEAF 2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R155/eth-1/0/22==DC2/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC2/eth1==R155/eth-1/0/22"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R199/eth-1/0/21==DC2/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/21"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC2/eth2==R199/eth-1/0/21"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}},
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/21"}}
+            ]
+        }
+    ]
+}
-- 
GitLab


From 6828d7dd46417ff5d727de41b2cab4a250d65c5d Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 18:32:45 +0000
Subject: [PATCH 194/229] Device component:

- IETF L2VPN Driver: removed force to show emulated devices
- Microwave: correcred parsing of existing services
- Openconfig: corrected gneration of endpoints; added missing retry decorators
---
 .../service/drivers/ietf_l2vpn/TfsDebugApiClient.py    |  2 +-
 src/device/service/drivers/microwave/Tools.py          | 10 ++++++++--
 .../service/drivers/openconfig/OpenConfigDriver.py     |  2 ++
 .../service/drivers/openconfig/templates/EndPoints.py  |  2 +-
 4 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/device/service/drivers/ietf_l2vpn/TfsDebugApiClient.py b/src/device/service/drivers/ietf_l2vpn/TfsDebugApiClient.py
index f8c4e0d94..4bf40af03 100644
--- a/src/device/service/drivers/ietf_l2vpn/TfsDebugApiClient.py
+++ b/src/device/service/drivers/ietf_l2vpn/TfsDebugApiClient.py
@@ -66,7 +66,7 @@ class TfsDebugApiClient:
         for json_device in reply.json()['devices']:
             device_uuid : str = json_device['device_id']['device_uuid']['uuid']
             device_type : str = json_device['device_type']
-            if not device_type.startswith('emu-'): device_type = 'emu-' + device_type
+            #if not device_type.startswith('emu-'): device_type = 'emu-' + device_type
             device_status = json_device['device_operational_status']
             device_url = '/devices/device[{:s}]'.format(device_uuid)
             device_data = {
diff --git a/src/device/service/drivers/microwave/Tools.py b/src/device/service/drivers/microwave/Tools.py
index 6245ff0af..4490c0f63 100644
--- a/src/device/service/drivers/microwave/Tools.py
+++ b/src/device/service/drivers/microwave/Tools.py
@@ -119,8 +119,14 @@ def config_getter(
                             resource_value['node_id_dst'] = access_point['access-node-id']
                             resource_value['tp_id_dst']   = access_point['access-ltp-id']
 
-                if len(node_ids) > 0 and resource_value['node_id_src'] not in node_ids: continue
-                if len(node_ids) > 0 and resource_value['node_id_dst'] not in node_ids: continue
+                if len(node_ids) > 0:
+                    node_id_src = resource_value.get('node_id_src')
+                    if node_id_src is None: continue
+                    if node_id_src not in node_ids: continue
+
+                    node_id_dst = resource_value.get('node_id_dst')
+                    if node_id_dst is None: continue
+                    if node_id_dst not in node_ids: continue
 
                 result.append((resource_key, resource_value))
         except requests.exceptions.Timeout:
diff --git a/src/device/service/drivers/openconfig/OpenConfigDriver.py b/src/device/service/drivers/openconfig/OpenConfigDriver.py
index ac0352752..569a0400e 100644
--- a/src/device/service/drivers/openconfig/OpenConfigDriver.py
+++ b/src/device/service/drivers/openconfig/OpenConfigDriver.py
@@ -113,9 +113,11 @@ class NetconfSessionHandler:
                 config, target=target, default_operation=default_operation, test_option=test_option,
                 error_option=error_option, format=format)
 
+    @RETRY_DECORATOR
     def locked(self, target):
         return self.__manager.locked(target=target)
 
+    @RETRY_DECORATOR
     def commit(self, confirmed=False, timeout=None, persist=None, persist_id=None):
         return self.__manager.commit(confirmed=confirmed, timeout=timeout, persist=persist, persist_id=persist_id)
 
diff --git a/src/device/service/drivers/openconfig/templates/EndPoints.py b/src/device/service/drivers/openconfig/templates/EndPoints.py
index 02fda8f0e..f16f0ffcd 100644
--- a/src/device/service/drivers/openconfig/templates/EndPoints.py
+++ b/src/device/service/drivers/openconfig/templates/EndPoints.py
@@ -55,5 +55,5 @@ def parse(xml_data : ET.Element) -> List[Tuple[str, Dict[str, Any]]]:
         add_value_from_collection(endpoint, 'sample_types', sample_types)
 
         if len(endpoint) == 0: continue
-        response.append(('/endpoint[{:s}]'.format(endpoint['uuid']), endpoint))
+        response.append(('/endpoints/endpoint[{:s}]'.format(endpoint['uuid']), endpoint))
     return response
-- 
GitLab


From 691cd597f4977129b9a28a9bea8cc197cf5fb498 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 18:33:04 +0000
Subject: [PATCH 195/229] Compute component:

- Added missing bearer mappings
---
 .../service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py   | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
index 84a18b32c..ed25dbab3 100644
--- a/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
+++ b/src/compute/service/rest_server/nbi_plugins/ietf_l2vpn/Constants.py
@@ -84,4 +84,8 @@ BEARER_MAPPINGS = {
     'PE3:1/2': ('PE3', '1/2', '10.3.1.2', None, 0, None, None, None, None),
     'PE4:1/1': ('PE4', '1/1', '10.4.1.1', None, 0, None, None, None, None),
     'PE4:1/2': ('PE4', '1/2', '10.4.1.2', None, 0, None, None, None, None),
+
+    'R149:eth-1/0/22': ('R149', 'eth-1/0/22', '5.5.5.5', None, 0, None, None, '5.5.5.1', '100'),
+    'R155:eth-1/0/22': ('R155', 'eth-1/0/22', '5.5.5.1', None, 0, None, None, '5.5.5.5', '100'),
+    'R199:eth-1/0/21': ('R199', 'eth-1/0/21', '5.5.5.6', None, 0, None, None, '5.5.5.5', '100'),
 }
-- 
GitLab


From f777ec496c900926c30c26588c65c4de04a142e2 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 1 Mar 2023 18:33:27 +0000
Subject: [PATCH 196/229] Tests - Tools - Mock MW Server:

- Added TODO with test cases to check
---
 src/tests/tools/mock_mw_sdn_ctrl/TODO.txt | 9 +++++++++
 1 file changed, 9 insertions(+)
 create mode 100644 src/tests/tools/mock_mw_sdn_ctrl/TODO.txt

diff --git a/src/tests/tools/mock_mw_sdn_ctrl/TODO.txt b/src/tests/tools/mock_mw_sdn_ctrl/TODO.txt
new file mode 100644
index 000000000..db764fcf2
--- /dev/null
+++ b/src/tests/tools/mock_mw_sdn_ctrl/TODO.txt
@@ -0,0 +1,9 @@
+extend discovery of mgmt VLANs
+
+>>> import requests
+>>> from requests.auth import HTTPBasicAuth
+>>> url = 'https://192.168.27.136:8443/nmswebs/restconf/data/ietf-eth-tran-service:etht-svc'
+>>> auth = HTTPBasicAuth('nms5ux', 'nms5ux')
+>>> response = requests.get(url, timeout=120, verify=False, auth=auth)
+>>> response.content
+{"ietf-eth-tran-service:etht-svc":{"etht-svc-instances":[{"te-topology-identifier":{"topology-id":"eth-native-topology","client-id":3373,"provider-id":3373},"etht-svc-name":"MGMT-VLAN-192-168-27-139","admin-status":"ietf-te-types:tunnel-state-up","etht-svc-type":"ietf-eth-tran-types:p2p-svc","etht-svc-end-points":[{"etht-svc-access-points":[{"access-node-id":"192.168.27.139","access-ltp-id":3,"access-point-id":"1"}],"outer-tag":{"vlan-value":100,"tag-type":"ietf-eth-tran-types:classify-c-vlan"},"etht-svc-end-point-name":"192.168.27.139:3","service-classification-type":"ietf-eth-tran-types:port-classification"}],"state":{"operational-state":"ietf-te-types:tunnel-state-up","provisioning-state":"ietf-te-types:lsp-state-up"}},{"te-topology-identifier":{"topology-id":"eth-native-topology","client-id":3373,"provider-id":3373},"etht-svc-name":"MGMT-VLAN-192-168-27-140","admin-status":"ietf-te-types:tunnel-state-up","etht-svc-type":"ietf-eth-tran-types:p2p-svc","etht-svc-end-points":[{"etht-svc-access-points":[{"access-node-id":"192.168.27.140","access-ltp-id":3,"access-point-id":"1"}],"outer-tag":{"vlan-value":100,"tag-type":"ietf-eth-tran-types:classify-c-vlan"},"etht-svc-end-point-name":"192.168.27.140:3","service-classification-type":"ietf-eth-tran-types:vlan-classification"}],"state":{"operational-state":"ietf-te-types:tunnel-state-up","provisioning-state":"ietf-te-types:lsp-state-up"}}],"globals":{}}}
-- 
GitLab


From 25c978f3b402caa6831bb88ba4628d8bb3c06faa Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 2 Mar 2023 09:02:13 +0000
Subject: [PATCH 197/229] Manifests:

- Corrected limits and replicas of compute and webui components
---
 manifests/computeservice.yaml | 11 +++++++----
 manifests/webuiservice.yaml   | 17 ++++++++++-------
 2 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/manifests/computeservice.yaml b/manifests/computeservice.yaml
index 7e40ef988..378e34b9b 100644
--- a/manifests/computeservice.yaml
+++ b/manifests/computeservice.yaml
@@ -20,6 +20,7 @@ spec:
   selector:
     matchLabels:
       app: computeservice
+  replicas: 1
   template:
     metadata:
       labels:
@@ -44,16 +45,18 @@ spec:
             command: ["/bin/grpc_health_probe", "-addr=:9090"]
         resources:
           requests:
-            cpu: 250m
-            memory: 512Mi
+            cpu: 50m
+            memory: 64Mi
           limits:
-            cpu: 700m
-            memory: 1024Mi
+            cpu: 500m
+            memory: 512Mi
 ---
 apiVersion: v1
 kind: Service
 metadata:
   name: computeservice
+  labels:
+    app: computeservice
 spec:
   type: ClusterIP
   selector:
diff --git a/manifests/webuiservice.yaml b/manifests/webuiservice.yaml
index f25dbf6e5..234075f73 100644
--- a/manifests/webuiservice.yaml
+++ b/manifests/webuiservice.yaml
@@ -20,6 +20,7 @@ spec:
   selector:
     matchLabels:
       app: webuiservice
+  replicas: 1
   template:
     metadata:
       labels:
@@ -55,11 +56,11 @@ spec:
           timeoutSeconds: 1
         resources:
           requests:
-            cpu: 100m
-            memory: 512Mi
+            cpu: 50m
+            memory: 64Mi
           limits:
-            cpu: 700m
-            memory: 1024Mi
+            cpu: 500m
+            memory: 512Mi
       - name: grafana
         image: grafana/grafana:8.5.11
         imagePullPolicy: IfNotPresent
@@ -92,16 +93,18 @@ spec:
           timeoutSeconds: 1
         resources:
           requests:
-            cpu: 250m
-            memory: 750Mi
+            cpu: 150m
+            memory: 512Mi
           limits:
-            cpu: 700m
+            cpu: 500m
             memory: 1024Mi
 ---
 apiVersion: v1
 kind: Service
 metadata:
   name: webuiservice
+  labels:
+    app: webuiservice
 spec:
   type: ClusterIP
   selector:
-- 
GitLab


From 9ae4ebf707cb4eec1b133e49a4356f944e255488 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 2 Mar 2023 11:39:10 +0000
Subject: [PATCH 198/229] OFC'23 demo:

- Added automation component to the deploy
---
 src/tests/ofc23/deploy_specs_child.sh  | 2 +-
 src/tests/ofc23/deploy_specs_parent.sh | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/tests/ofc23/deploy_specs_child.sh b/src/tests/ofc23/deploy_specs_child.sh
index 0349dba5a..a5ba3a9a0 100755
--- a/src/tests/ofc23/deploy_specs_child.sh
+++ b/src/tests/ofc23/deploy_specs_child.sh
@@ -21,7 +21,7 @@ export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by spaces, you want to build images for, and deploy.
 #automation monitoring load_generator
-export TFS_COMPONENTS="context device pathcomp service slice compute webui"
+export TFS_COMPONENTS="context device automation pathcomp service slice compute webui"
 
 # Set the tag you want to use for your images.
 export TFS_IMAGE_TAG="dev"
diff --git a/src/tests/ofc23/deploy_specs_parent.sh b/src/tests/ofc23/deploy_specs_parent.sh
index fc362c08c..006c139f3 100755
--- a/src/tests/ofc23/deploy_specs_parent.sh
+++ b/src/tests/ofc23/deploy_specs_parent.sh
@@ -21,7 +21,7 @@ export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by spaces, you want to build images for, and deploy.
 #automation monitoring load_generator
-export TFS_COMPONENTS="context device pathcomp service slice compute webui"
+export TFS_COMPONENTS="context device automation pathcomp service slice compute webui"
 
 # Set the tag you want to use for your images.
 export TFS_IMAGE_TAG="dev"
-- 
GitLab


From f4ed75a8f550f8f485548077b4e6e8c0db247b89 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 2 Mar 2023 11:39:39 +0000
Subject: [PATCH 199/229] Automation component:

- Added missing IETF_L2VPN entry to enum
---
 .../eu/teraflow/automation/context/model/DeviceDriverEnum.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceDriverEnum.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceDriverEnum.java
index a364bb0e3..3a26937e7 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceDriverEnum.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceDriverEnum.java
@@ -23,5 +23,6 @@ public enum DeviceDriverEnum {
     P4,
     IETF_NETWORK_TOPOLOGY,
     ONF_TR_352,
-    XR
+    XR,
+    IETF_L2VPN
 }
-- 
GitLab


From 19328bbc476e6e404bc5fedd473d0db1f7b2f7dd Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 3 Mar 2023 13:24:19 +0000
Subject: [PATCH 200/229] PathComp component - Frontend:

- Added missing name-uuid mapping
---
 src/pathcomp/frontend/service/algorithms/_Algorithm.py | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/pathcomp/frontend/service/algorithms/_Algorithm.py b/src/pathcomp/frontend/service/algorithms/_Algorithm.py
index 6cc4c5496..b486ec1b5 100644
--- a/src/pathcomp/frontend/service/algorithms/_Algorithm.py
+++ b/src/pathcomp/frontend/service/algorithms/_Algorithm.py
@@ -64,6 +64,7 @@ class _Algorithm:
             _device_uuid = grpc_device.device_id.device_uuid.uuid
             _device_name = grpc_device.name
             self.device_name_mapping[_device_name] = _device_uuid
+            self.device_name_mapping[_device_uuid] = _device_uuid
 
             device_endpoint_dict : Dict[str, Tuple[Dict, EndPointId]] = dict()
             for json_endpoint,grpc_endpoint in zip(json_device['device_endpoints'], grpc_device.device_endpoints):
@@ -75,6 +76,8 @@ class _Algorithm:
                 _endpoint_name = grpc_endpoint.name
                 self.endpoint_name_mapping[(_device_uuid, _endpoint_name)] = _endpoint_uuid
                 self.endpoint_name_mapping[(_device_name, _endpoint_name)] = _endpoint_uuid
+                self.endpoint_name_mapping[(_device_uuid, _endpoint_uuid)] = _endpoint_uuid
+                self.endpoint_name_mapping[(_device_name, _endpoint_uuid)] = _endpoint_uuid
 
             self.endpoint_dict[device_uuid] = device_endpoint_dict
 
-- 
GitLab


From 72afa877cded22048b3c42ef4e4e0b1d3669db36 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 3 Mar 2023 13:26:41 +0000
Subject: [PATCH 201/229] Slice component:

- added workaround for multi-instance deployments
---
 src/slice/service/slice_grouper/SliceGrouper.py | 1 +
 src/slice/service/slice_grouper/Tools.py        | 8 ++++++++
 2 files changed, 9 insertions(+)

diff --git a/src/slice/service/slice_grouper/SliceGrouper.py b/src/slice/service/slice_grouper/SliceGrouper.py
index 735d02899..2f1a79181 100644
--- a/src/slice/service/slice_grouper/SliceGrouper.py
+++ b/src/slice/service/slice_grouper/SliceGrouper.py
@@ -29,6 +29,7 @@ class SliceGrouper:
     def __init__(self) -> None:
         self._lock = threading.Lock()
         self._is_enabled = is_slice_grouping_enabled()
+        LOGGER.info('Slice Grouping: {:s}'.format('ENABLED' if self._is_enabled else 'DISABLED'))
         if not self._is_enabled: return
 
         metrics_exporter = MetricsExporter()
diff --git a/src/slice/service/slice_grouper/Tools.py b/src/slice/service/slice_grouper/Tools.py
index ca957f3c7..d5a78ba2b 100644
--- a/src/slice/service/slice_grouper/Tools.py
+++ b/src/slice/service/slice_grouper/Tools.py
@@ -12,6 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import logging
 from typing import Dict, List, Optional, Set, Tuple
 from common.Constants import DEFAULT_CONTEXT_NAME
 from common.Settings import get_setting
@@ -27,7 +28,14 @@ TRUE_VALUES = {'Y', 'YES', 'TRUE', 'T', 'E', 'ENABLE', 'ENABLED'}
 
 NO_ISOLATION = IsolationLevelEnum.NO_ISOLATION
 
+LOGGER = logging.getLogger(__name__)
+
 def is_slice_grouping_enabled() -> bool:
+    # Temporal hack for OFC'23 multi-demo:
+    metricsdb_hostname = get_setting('METRICSDB_HOSTNAME', default='')
+    LOGGER.warning('metricsdb_hostname={:s}'.format(str(metricsdb_hostname)))
+    if '.qdb-sligrp.' in metricsdb_hostname: return True
+    # end hack
     is_enabled = get_setting(SETTING_NAME_SLICE_GROUPING, default=None)
     if is_enabled is None: return False
     str_is_enabled = str(is_enabled).upper()
-- 
GitLab


From 848d6d271f7f40ef43cbd83828e0267ed5a688d1 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 3 Mar 2023 13:28:20 +0000
Subject: [PATCH 202/229] OFC'23 demo:

- updated descriptors and scripts
---
 .../ofc23/{delete_all.sh => delete_hierar.sh} |   0
 src/tests/ofc23/delete_sligrp.sh              |  18 +
 .../ofc23/{deploy_all.sh => deploy_hierar.sh} |   0
 src/tests/ofc23/deploy_sligrp.sh              |  23 ++
 src/tests/ofc23/deploy_specs_child.sh         |  20 +-
 src/tests/ofc23/deploy_specs_parent.sh        |  16 +-
 src/tests/ofc23/deploy_specs_sligrp.sh        | 118 +++++++
 .../ofc23/descriptors/adva-interfaces.txt     |  89 +++++
 .../descriptors/backup/dc-2-dc-service.json   |  37 +++
 .../descriptors/backup/descriptor_child.json  | 183 +++++++++++
 .../descriptors/backup/descriptor_parent.json | 258 +++++++++++++++
 .../emulated/descriptor_parent.json           | 117 ++-----
 .../ofc23/descriptors/emulated/ipm-ctrl.json  |  25 ++
 .../emulated/old/descriptor_parent.json       | 311 ++++++++++++++++++
 .../descriptors/real/descriptor_child.json    |   6 +-
 src/tests/ofc23/show_deploy_sligrp.sh         |  26 ++
 16 files changed, 1141 insertions(+), 106 deletions(-)
 rename src/tests/ofc23/{delete_all.sh => delete_hierar.sh} (100%)
 create mode 100755 src/tests/ofc23/delete_sligrp.sh
 rename src/tests/ofc23/{deploy_all.sh => deploy_hierar.sh} (100%)
 create mode 100755 src/tests/ofc23/deploy_sligrp.sh
 create mode 100755 src/tests/ofc23/deploy_specs_sligrp.sh
 create mode 100644 src/tests/ofc23/descriptors/adva-interfaces.txt
 create mode 100644 src/tests/ofc23/descriptors/backup/dc-2-dc-service.json
 create mode 100644 src/tests/ofc23/descriptors/backup/descriptor_child.json
 create mode 100644 src/tests/ofc23/descriptors/backup/descriptor_parent.json
 create mode 100644 src/tests/ofc23/descriptors/emulated/ipm-ctrl.json
 create mode 100644 src/tests/ofc23/descriptors/emulated/old/descriptor_parent.json
 create mode 100755 src/tests/ofc23/show_deploy_sligrp.sh

diff --git a/src/tests/ofc23/delete_all.sh b/src/tests/ofc23/delete_hierar.sh
similarity index 100%
rename from src/tests/ofc23/delete_all.sh
rename to src/tests/ofc23/delete_hierar.sh
diff --git a/src/tests/ofc23/delete_sligrp.sh b/src/tests/ofc23/delete_sligrp.sh
new file mode 100755
index 000000000..cce0bd53f
--- /dev/null
+++ b/src/tests/ofc23/delete_sligrp.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# Delete old namespaces
+kubectl delete namespace tfs
diff --git a/src/tests/ofc23/deploy_all.sh b/src/tests/ofc23/deploy_hierar.sh
similarity index 100%
rename from src/tests/ofc23/deploy_all.sh
rename to src/tests/ofc23/deploy_hierar.sh
diff --git a/src/tests/ofc23/deploy_sligrp.sh b/src/tests/ofc23/deploy_sligrp.sh
new file mode 100755
index 000000000..62a9df5cf
--- /dev/null
+++ b/src/tests/ofc23/deploy_sligrp.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# Delete old namespaces
+kubectl delete namespace tfs-sligrp
+
+# Deploy TFS for Slice Goruping
+source ofc23/deploy_specs_sligrp.sh
+./deploy/all.sh
+mv tfs_runtime_env_vars.sh tfs_runtime_env_vars_sligrp.sh
diff --git a/src/tests/ofc23/deploy_specs_child.sh b/src/tests/ofc23/deploy_specs_child.sh
index a5ba3a9a0..4d2b35022 100755
--- a/src/tests/ofc23/deploy_specs_child.sh
+++ b/src/tests/ofc23/deploy_specs_child.sh
@@ -21,7 +21,7 @@ export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by spaces, you want to build images for, and deploy.
 #automation monitoring load_generator
-export TFS_COMPONENTS="context device automation pathcomp service slice compute webui"
+export TFS_COMPONENTS="context device pathcomp service slice compute webui"
 
 # Set the tag you want to use for your images.
 export TFS_IMAGE_TAG="dev"
@@ -42,13 +42,13 @@ export TFS_SKIP_BUILD="YES"
 # ----- CockroachDB ------------------------------------------------------------
 
 # Set the namespace where CockroackDB will be deployed.
-export CRDB_NAMESPACE="crdb-child"
+export CRDB_NAMESPACE="crdb"
 
 # Set the external port CockroackDB Postgre SQL interface will be exposed to.
-export CRDB_EXT_PORT_SQL="26258"
+export CRDB_EXT_PORT_SQL="26257"
 
 # Set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
-export CRDB_EXT_PORT_HTTP="8082"
+export CRDB_EXT_PORT_HTTP="8081"
 
 # Set the database username to be used by Context.
 export CRDB_USERNAME="tfs"
@@ -57,7 +57,7 @@ export CRDB_USERNAME="tfs"
 export CRDB_PASSWORD="tfs123"
 
 # Set the database name to be used by Context.
-export CRDB_DATABASE="tfs"
+export CRDB_DATABASE="tfs_child"
 
 # Set CockroachDB installation mode to 'single'. This option is convenient for development and testing.
 # See ./deploy/all.sh or ./deploy/crdb.sh for additional details
@@ -76,10 +76,10 @@ export CRDB_REDEPLOY=""
 export NATS_NAMESPACE="nats-child"
 
 # Set the external port NATS Client interface will be exposed to.
-export NATS_EXT_PORT_CLIENT="4223"
+export NATS_EXT_PORT_CLIENT="4224"
 
 # Set the external port NATS HTTP Mgmt GUI interface will be exposed to.
-export NATS_EXT_PORT_HTTP="8223"
+export NATS_EXT_PORT_HTTP="8224"
 
 # Disable flag for re-deploying NATS from scratch.
 export NATS_REDEPLOY=""
@@ -91,13 +91,13 @@ export NATS_REDEPLOY=""
 export QDB_NAMESPACE="qdb-child"
 
 # Set the external port QuestDB Postgre SQL interface will be exposed to.
-export QDB_EXT_PORT_SQL="8813"
+export QDB_EXT_PORT_SQL="8814"
 
 # Set the external port QuestDB Influx Line Protocol interface will be exposed to.
-export QDB_EXT_PORT_ILP="9010"
+export QDB_EXT_PORT_ILP="9012"
 
 # Set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
-export QDB_EXT_PORT_HTTP="9001"
+export QDB_EXT_PORT_HTTP="9002"
 
 # Set the database username to be used for QuestDB.
 export QDB_USERNAME="admin"
diff --git a/src/tests/ofc23/deploy_specs_parent.sh b/src/tests/ofc23/deploy_specs_parent.sh
index 006c139f3..808f4e287 100755
--- a/src/tests/ofc23/deploy_specs_parent.sh
+++ b/src/tests/ofc23/deploy_specs_parent.sh
@@ -21,7 +21,7 @@ export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
 
 # Set the list of components, separated by spaces, you want to build images for, and deploy.
 #automation monitoring load_generator
-export TFS_COMPONENTS="context device automation pathcomp service slice compute webui"
+export TFS_COMPONENTS="context device pathcomp service slice compute webui"
 
 # Set the tag you want to use for your images.
 export TFS_IMAGE_TAG="dev"
@@ -42,7 +42,7 @@ export TFS_SKIP_BUILD=""
 # ----- CockroachDB ------------------------------------------------------------
 
 # Set the namespace where CockroackDB will be deployed.
-export CRDB_NAMESPACE="crdb-parent"
+export CRDB_NAMESPACE="crdb"
 
 # Set the external port CockroackDB Postgre SQL interface will be exposed to.
 export CRDB_EXT_PORT_SQL="26257"
@@ -57,7 +57,7 @@ export CRDB_USERNAME="tfs"
 export CRDB_PASSWORD="tfs123"
 
 # Set the database name to be used by Context.
-export CRDB_DATABASE="tfs"
+export CRDB_DATABASE="tfs_parent"
 
 # Set CockroachDB installation mode to 'single'. This option is convenient for development and testing.
 # See ./deploy/all.sh or ./deploy/crdb.sh for additional details
@@ -76,10 +76,10 @@ export CRDB_REDEPLOY=""
 export NATS_NAMESPACE="nats-parent"
 
 # Set the external port NATS Client interface will be exposed to.
-export NATS_EXT_PORT_CLIENT="4222"
+export NATS_EXT_PORT_CLIENT="4223"
 
 # Set the external port NATS HTTP Mgmt GUI interface will be exposed to.
-export NATS_EXT_PORT_HTTP="8222"
+export NATS_EXT_PORT_HTTP="8223"
 
 # Disable flag for re-deploying NATS from scratch.
 export NATS_REDEPLOY=""
@@ -91,13 +91,13 @@ export NATS_REDEPLOY=""
 export QDB_NAMESPACE="qdb-parent"
 
 # Set the external port QuestDB Postgre SQL interface will be exposed to.
-export QDB_EXT_PORT_SQL="8812"
+export QDB_EXT_PORT_SQL="8813"
 
 # Set the external port QuestDB Influx Line Protocol interface will be exposed to.
-export QDB_EXT_PORT_ILP="9009"
+export QDB_EXT_PORT_ILP="9011"
 
 # Set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
-export QDB_EXT_PORT_HTTP="9000"
+export QDB_EXT_PORT_HTTP="9001"
 
 # Set the database username to be used for QuestDB.
 export QDB_USERNAME="admin"
diff --git a/src/tests/ofc23/deploy_specs_sligrp.sh b/src/tests/ofc23/deploy_specs_sligrp.sh
new file mode 100755
index 000000000..90bea4567
--- /dev/null
+++ b/src/tests/ofc23/deploy_specs_sligrp.sh
@@ -0,0 +1,118 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# ----- TeraFlowSDN ------------------------------------------------------------
+
+# Set the URL of the internal MicroK8s Docker registry where the images will be uploaded to.
+export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
+
+# Set the list of components, separated by spaces, you want to build images for, and deploy.
+#automation monitoring load_generator
+export TFS_COMPONENTS="context device pathcomp service slice webui load_generator"
+
+# Set the tag you want to use for your images.
+export TFS_IMAGE_TAG="dev"
+
+# Set the name of the Kubernetes namespace to deploy TFS to.
+export TFS_K8S_NAMESPACE="tfs-sligrp"
+
+# Set additional manifest files to be applied after the deployment
+export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml"
+
+# Set the new Grafana admin password
+export TFS_GRAFANA_PASSWORD="admin123+"
+
+# Disable skip-build flag to rebuild the Docker images.
+export TFS_SKIP_BUILD=""
+
+
+# ----- CockroachDB ------------------------------------------------------------
+
+# Set the namespace where CockroackDB will be deployed.
+export CRDB_NAMESPACE="crdb"
+
+# Set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL="26257"
+
+# Set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP="8081"
+
+# Set the database username to be used by Context.
+export CRDB_USERNAME="tfs"
+
+# Set the database user's password to be used by Context.
+export CRDB_PASSWORD="tfs123"
+
+# Set the database name to be used by Context.
+export CRDB_DATABASE="tfs_sligrp"
+
+# Set CockroachDB installation mode to 'single'. This option is convenient for development and testing.
+# See ./deploy/all.sh or ./deploy/crdb.sh for additional details
+export CRDB_DEPLOY_MODE="single"
+
+# Disable flag for dropping database, if it exists.
+export CRDB_DROP_DATABASE_IF_EXISTS="YES"
+
+# Disable flag for re-deploying CockroachDB from scratch.
+export CRDB_REDEPLOY=""
+
+
+# ----- NATS -------------------------------------------------------------------
+
+# Set the namespace where NATS will be deployed.
+export NATS_NAMESPACE="nats-sligrp"
+
+# Set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT="4222"
+
+# Set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP="8222"
+
+# Disable flag for re-deploying NATS from scratch.
+export NATS_REDEPLOY=""
+
+
+# ----- QuestDB ----------------------------------------------------------------
+
+# Set the namespace where QuestDB will be deployed.
+export QDB_NAMESPACE="qdb-sligrp"
+
+# Set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL="8812"
+
+# Set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP="9010"
+
+# Set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP="9000"
+
+# Set the database username to be used for QuestDB.
+export QDB_USERNAME="admin"
+
+# Set the database user's password to be used for QuestDB.
+export QDB_PASSWORD="quest"
+
+# Set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
+
+# Set the table name to be used by Slice for plotting groups.
+export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
+
+# Disable flag for dropping tables if they exist.
+export QDB_DROP_TABLES_IF_EXIST="YES"
+
+# Disable flag for re-deploying QuestDB from scratch.
+export QDB_REDEPLOY=""
diff --git a/src/tests/ofc23/descriptors/adva-interfaces.txt b/src/tests/ofc23/descriptors/adva-interfaces.txt
new file mode 100644
index 000000000..a63473505
--- /dev/null
+++ b/src/tests/ofc23/descriptors/adva-interfaces.txt
@@ -0,0 +1,89 @@
+R199
+eth-1/0/1
+eth-1/0/10
+eth-1/0/11
+eth-1/0/12
+eth-1/0/13
+eth-1/0/14
+eth-1/0/15
+eth-1/0/16
+eth-1/0/17
+eth-1/0/18
+eth-1/0/19
+eth-1/0/2
+eth-1/0/20
+eth-1/0/21
+eth-1/0/22
+eth-1/0/23
+eth-1/0/24
+eth-1/0/25
+eth-1/0/26
+eth-1/0/27
+eth-1/0/28
+eth-1/0/29
+eth-1/0/3
+eth-1/0/30
+eth-1/0/4
+eth-1/0/5
+eth-1/0/6
+eth-1/0/7
+eth-1/0/8
+eth-1/0/9
+
+R155
+eth-1/0/1
+eth-1/0/10
+eth-1/0/11
+eth-1/0/12
+eth-1/0/13
+eth-1/0/14
+eth-1/0/15
+eth-1/0/16
+eth-1/0/17
+eth-1/0/18
+eth-1/0/19
+eth-1/0/2
+eth-1/0/20
+eth-1/0/21
+eth-1/0/22
+eth-1/0/23
+eth-1/0/24
+eth-1/0/25
+eth-1/0/26
+eth-1/0/27
+eth-1/0/3
+eth-1/0/4
+eth-1/0/5
+eth-1/0/6
+eth-1/0/7
+eth-1/0/8
+eth-1/0/9
+
+R149
+eth-1/0/1
+eth-1/0/10
+eth-1/0/11
+eth-1/0/12
+eth-1/0/13
+eth-1/0/14
+eth-1/0/15
+eth-1/0/16
+eth-1/0/17
+eth-1/0/18
+eth-1/0/19
+eth-1/0/2
+eth-1/0/20
+eth-1/0/21
+eth-1/0/22
+eth-1/0/23
+eth-1/0/24
+eth-1/0/25
+eth-1/0/26
+eth-1/0/27
+eth-1/0/3
+eth-1/0/4
+eth-1/0/5
+eth-1/0/6
+eth-1/0/7
+eth-1/0/8
+eth-1/0/9
diff --git a/src/tests/ofc23/descriptors/backup/dc-2-dc-service.json b/src/tests/ofc23/descriptors/backup/dc-2-dc-service.json
new file mode 100644
index 000000000..3a83afa6d
--- /dev/null
+++ b/src/tests/ofc23/descriptors/backup/dc-2-dc-service.json
@@ -0,0 +1,37 @@
+{
+    "services": [
+        {
+            "service_id": {
+                "context_id": {"context_uuid": {"uuid": "admin"}}, "service_uuid": {"uuid": "dc-2-dc-svc"}
+            },
+            "service_type": 2,
+            "service_status": {"service_status": 1},
+            "service_endpoint_ids": [
+                {"device_id":{"device_uuid":{"uuid":"DC1"}},"endpoint_uuid":{"uuid":"int"}},
+                {"device_id":{"device_uuid":{"uuid":"DC2"}},"endpoint_uuid":{"uuid":"int"}}
+            ],
+            "service_constraints": [
+                {"sla_capacity": {"capacity_gbps": 10.0}},
+                {"sla_latency": {"e2e_latency_ms": 15.2}}
+            ],
+            "service_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "/settings", "resource_value": {
+                    "address_families": ["IPV4"], "bgp_as": 65000, "bgp_route_target": "65000:123",
+                    "mtu": 1512, "vlan_id": 111
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[R149]/endpoint[eth-1/0/22]/settings", "resource_value": {
+                    "route_distinguisher": "65000:123", "router_id": "5.5.5.5",
+                    "address_ip": "172.16.4.1", "address_prefix": 24, "sub_interface_index": 0, "vlan_id": 111
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[R155]/endpoint[eth-1/0/22]/settings", "resource_value": {
+                    "route_distinguisher": "65000:123", "router_id": "5.5.5.1",
+                    "address_ip": "172.16.2.1", "address_prefix": 24, "sub_interface_index": 0, "vlan_id": 111
+                }}},
+                {"action": 1, "custom": {"resource_key": "/device[R199]/endpoint[eth-1/0/21]/settings", "resource_value": {
+                    "route_distinguisher": "65000:123", "router_id": "5.5.5.6",
+                    "address_ip": "172.16.1.1", "address_prefix": 24, "sub_interface_index": 0, "vlan_id": 111
+                }}}
+            ]}
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/backup/descriptor_child.json b/src/tests/ofc23/descriptors/backup/descriptor_child.json
new file mode 100644
index 000000000..eea957153
--- /dev/null
+++ b/src/tests/ofc23/descriptors/backup/descriptor_child.json
@@ -0,0 +1,183 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "R199"}}, "device_type": "packet-router", "device_drivers": [1],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.95.86.199"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "830"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin",
+                    "force_running": false, "hostkey_verify": false, "look_for_keys": false,
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "huaweiyang"},
+                    "manager_params": {"timeout" : 120},
+                    "endpoints": [
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/1"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/2"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/3"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/4"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/5"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/6"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/7"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/8"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/9"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/10"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/11"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/12"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/13"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/14"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/15"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/16"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/17"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/18"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/19"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/20"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/21"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/22"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/23"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/24"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/25"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/26"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/27"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/28"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/29"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/30"}
+                    ]
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R155"}}, "device_type": "packet-router", "device_drivers": [1],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.95.86.155"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "830"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin",
+                    "force_running": false, "hostkey_verify": false, "look_for_keys": false,
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "huaweiyang"},
+                    "manager_params": {"timeout" : 120},
+                    "endpoints": [
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/1"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/2"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/3"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/4"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/5"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/6"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/7"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/8"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/9"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/10"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/11"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/12"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/13"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/14"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/15"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/16"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/17"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/18"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/19"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/20"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/21"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/22"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/23"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/24"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/25"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/26"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/27"}
+                    ]
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "R149"}}, "device_type": "packet-router", "device_drivers": [1],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.95.86.149"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "830"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin",
+                    "force_running": false, "hostkey_verify": false, "look_for_keys": false,
+                    "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "huaweiyang"},
+                    "manager_params": {"timeout" : 120},
+                    "endpoints": [
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/1"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/2"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/3"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/4"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/5"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/6"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/7"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/8"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/9"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/10"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/11"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/12"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/13"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/14"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/15"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/16"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/17"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/18"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/19"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/20"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/21"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/22"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/23"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/24"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/25"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/26"},
+                        {"sample_types": [], "type": "copper/internal", "uuid": "eth-1/0/27"}
+                    ]
+                }}}
+            ]}
+        }
+    ],
+    "links": [
+        {
+            "link_id": {"link_uuid": {"uuid": "R199/eth-1/0/19==R155/eth-1/0/19"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/19"}},
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/19"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R155/eth-1/0/19==R199/eth-1/0/19"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/19"}},
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/19"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R199/eth-1/0/20==R149/eth-1/0/20"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}},
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R149/eth-1/0/20==R199/eth-1/0/20"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}},
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R149/eth-1/0/25==R155/eth-1/0/25"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}},
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R155/eth-1/0/25==R149/eth-1/0/25"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}},
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}}
+            ]
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/backup/descriptor_parent.json b/src/tests/ofc23/descriptors/backup/descriptor_parent.json
new file mode 100644
index 000000000..42b60e3cf
--- /dev/null
+++ b/src/tests/ofc23/descriptors/backup/descriptor_parent.json
@@ -0,0 +1,258 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "TFS-IP"}}, "device_type": "teraflowsdn", "device_drivers": [7],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8002"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "scheme": "http", "username": "admin", "password": "admin"
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "MW"}}, "device_type": "microwave-radio-system", "device_drivers": [4, 5],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8443"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "nms5ux", "password": "nms5ux", "timeout": 120, "scheme": "https",
+                    "node_ids": ["192.168.27.139", "192.168.27.140"]
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "OLS"}}, "device_type": "open-line-system", "device_drivers": [2],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "cttc-ols.cttc-ols.svc.cluster.local"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "4900"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"timeout": 120}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "IPM"}}, "device_type": "xr-constellation", "device_drivers": [6],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8444"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "xr-user-1", "password": "xr-user-1", "hub_module_name": "OFC HUB 1",
+                    "consistency-mode": "lifecycle", "import_topology": "devices"
+                }}}
+            ]}
+        },
+
+
+        {
+            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "device_type": "emu-optical-splitter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "optical/internal", "uuid": "common"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf1"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf2"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf3"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf4"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "DC2"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        }
+    ],
+    "links": [
+        {
+            "link_id": {"link_uuid": {"uuid": "DC1/eth1==R149/eth-1/0/22"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R149/eth-1/0/22==DC1/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}},
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R149/eth-1/0/9==MW/192.168.27.140:5"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/9"}},
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.140:5"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "MW/192.168.27.140:5==R149/eth-1/0/9"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.140:5"}},
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/9"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "MW/192.168.27.139:5==OFC HUB 1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.139:5"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/1/1==MW/192.168.27.139:5"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.139:5"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/XR-T1==Optical-Splitter/common"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "common"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/common==OFC HUB 1/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "common"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/leaf1==OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "aade6001-f00b-5e2f-a357-6a0a9d3de870"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/79516f5e-55a0-5671-977a-1f5cc934e700==Optical-Splitter/leaf1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "79516f5e-55a0-5671-977a-1f5cc934e700"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/leaf2==OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf2"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/30d9323e-b916-51ce-a9a8-cf88f62eb77f==Optical-Splitter/leaf2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "30d9323e-b916-51ce-a9a8-cf88f62eb77f"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 1/XR-T1==OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/68ac012e-54d4-5846-b5dc-6ec356404f90==OFC LEAF 1/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "68ac012e-54d4-5846-b5dc-6ec356404f90"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 2/XR-T1==OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/367b19b1-3172-54d8-bdd4-12d3ac5604f6==OFC LEAF 2/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "367b19b1-3172-54d8-bdd4-12d3ac5604f6"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 1/1/1==R155/eth-1/0/25"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R155/eth-1/0/25==OFC LEAF 1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 2/1/1==R199/eth-1/0/20"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "R199/eth-1/0/20==OFC LEAF 2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R155/eth-1/0/22==DC2/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC2/eth1==R155/eth-1/0/22"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "R199/eth-1/0/21==DC2/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/21"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC2/eth2==R199/eth-1/0/21"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}},
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/21"}}
+            ]
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/emulated/descriptor_parent.json b/src/tests/ofc23/descriptors/emulated/descriptor_parent.json
index 413b75662..1b1f5dbfd 100644
--- a/src/tests/ofc23/descriptors/emulated/descriptor_parent.json
+++ b/src/tests/ofc23/descriptors/emulated/descriptor_parent.json
@@ -17,24 +17,13 @@
             ]}
         },
         {
-            "device_id": {"device_uuid": {"uuid": "MW1-2"}}, "device_type": "microwave-radio-system", "device_drivers": [5],
+            "device_id": {"device_uuid": {"uuid": "MW"}}, "device_type": "microwave-radio-system", "device_drivers": [4, 5],
             "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
                 {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
                 {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8443"}},
                 {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
                     "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
-                    "node_ids": ["172.18.0.1", "172.18.0.2"]
-                }}}
-            ]}
-        },
-        {
-            "device_id": {"device_uuid": {"uuid": "MW3-4"}}, "device_type": "microwave-radio-system", "device_drivers": [5],
-            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
-                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
-                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8443"}},
-                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
-                    "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
-                    "node_ids": ["172.18.0.3", "172.18.0.4"]
+                    "node_ids": ["192.168.27.139", "192.168.27.140"]
                 }}}
             ]}
         },
@@ -100,85 +89,43 @@
     ],
     "links": [
         {
-            "link_id": {"link_uuid": {"uuid": "DC1/eth1==PE1/1/1"}}, "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "DC1/eth1==R149/eth-1/0/22"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}},
-                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "PE1/1/1==DC1/eth1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+            "link_id": {"link_uuid": {"uuid": "R149/eth-1/0/22==DC1/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}},
                 {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}}
             ]
         },
 
 
         {
-            "link_id": {"link_uuid": {"uuid": "DC1/eth2==PE2/1/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth2"}},
-                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/1"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "PE2/1/1==DC1/eth2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/1"}},
-                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth2"}}
-            ]
-        },
-
-
-        {
-            "link_id": {"link_uuid": {"uuid": "PE1/1/2==MW1-2/172.18.0.1:1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/2"}},
-                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.1:1"}}
+            "link_id": {"link_uuid": {"uuid": "R149/eth-1/0/9==MW/192.168.27.140:5"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/9"}},
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.140:5"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "MW1-2/172.18.0.1:1==PE1/1/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.1:1"}},
-                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            "link_id": {"link_uuid": {"uuid": "MW/192.168.27.140:5==R149/eth-1/0/9"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.140:5"}},
+                {"device_id": {"device_uuid": {"uuid": "R149"}}, "endpoint_uuid": {"uuid": "eth-1/0/9"}}
             ]
         },
 
 
         {
-            "link_id": {"link_uuid": {"uuid": "MW1-2/172.18.0.2:1==OFC HUB 1/1/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.2:1"}},
+            "link_id": {"link_uuid": {"uuid": "MW/192.168.27.139:5==OFC HUB 1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.139:5"}},
                 {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/1"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/1/1==MW1-2/172.18.0.2:1"}}, "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/1/1==MW/192.168.27.139:5"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/1"}},
-                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.2:1"}}
-            ]
-        },
-
-
-        {
-            "link_id": {"link_uuid": {"uuid": "PE2/1/2==MW3-4/172.18.0.3:1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/2"}},
-                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.3:1"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "MW3-4/172.18.0.3:1==PE2/1/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.3:1"}},
-                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/2"}}
-            ]
-        },
-
-
-        {
-            "link_id": {"link_uuid": {"uuid": "MW3-4/172.18.0.4:1==OFC HUB 1/1/2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.4:1"}},
-                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/2"}}
-            ]
-        },
-        {
-            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/1/2==MW3-4/172.18.0.4:1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/2"}},
-                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.4:1"}}
+                {"device_id": {"device_uuid": {"uuid": "MW"}}, "endpoint_uuid": {"uuid": "192.168.27.139:5"}}
             ]
         },
 
@@ -254,57 +201,57 @@
 
 
         {
-            "link_id": {"link_uuid": {"uuid": "OFC LEAF 1/1/1==PE3/1/2"}}, "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 1/1/1==R155/eth-1/0/25"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "1/1"}},
-                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/2"}}
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "PE3/1/2==OFC LEAF 1/1/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/2"}},
+            "link_id": {"link_uuid": {"uuid": "R155/eth-1/0/25==OFC LEAF 1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/25"}},
                 {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "1/1"}}
             ]
         },
 
 
         {
-            "link_id": {"link_uuid": {"uuid": "OFC LEAF 2/1/1==PE4/1/2"}}, "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 2/1/1==R199/eth-1/0/20"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "1/1"}},
-                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/2"}}
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "PE4/1/2==OFC LEAF 2/1/1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/2"}},
+            "link_id": {"link_uuid": {"uuid": "R199/eth-1/0/20==OFC LEAF 2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/20"}},
                 {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "1/1"}}
             ]
         },
 
 
         {
-            "link_id": {"link_uuid": {"uuid": "PE3/1/1==DC2/eth1"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/1"}},
+            "link_id": {"link_uuid": {"uuid": "R155/eth-1/0/22==DC2/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}},
                 {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "DC2/eth1==PE3/1/1"}}, "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "DC2/eth1==R155/eth-1/0/22"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}},
-                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/1"}}
+                {"device_id": {"device_uuid": {"uuid": "R155"}}, "endpoint_uuid": {"uuid": "eth-1/0/22"}}
             ]
         },
 
 
         {
-            "link_id": {"link_uuid": {"uuid": "PE4/1/1==DC2/eth2"}}, "link_endpoint_ids": [
-                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/1"}},
+            "link_id": {"link_uuid": {"uuid": "R199/eth-1/0/21==DC2/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/21"}},
                 {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}}
             ]
         },
         {
-            "link_id": {"link_uuid": {"uuid": "DC2/eth2==PE4/1/1"}}, "link_endpoint_ids": [
+            "link_id": {"link_uuid": {"uuid": "DC2/eth2==R199/eth-1/0/21"}}, "link_endpoint_ids": [
                 {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}},
-                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/1"}}
+                {"device_id": {"device_uuid": {"uuid": "R199"}}, "endpoint_uuid": {"uuid": "eth-1/0/21"}}
             ]
         }
     ]
diff --git a/src/tests/ofc23/descriptors/emulated/ipm-ctrl.json b/src/tests/ofc23/descriptors/emulated/ipm-ctrl.json
new file mode 100644
index 000000000..91e9de611
--- /dev/null
+++ b/src/tests/ofc23/descriptors/emulated/ipm-ctrl.json
@@ -0,0 +1,25 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"topology_uuid": {"uuid": "admin"}, "context_id": {"context_uuid": {"uuid": "admin"}}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "XR-CONSTELLATION"}},
+            "device_type": "xr-constellation",
+            "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8444"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "xr-user-1", "password": "xr-user-1", "hub_module_name": "OFC HUB 1",
+                    "consistency-mode": "lifecycle"
+                }}}
+            ]},
+            "device_operational_status": 1,
+            "device_drivers": [6],
+            "device_endpoints": []
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/emulated/old/descriptor_parent.json b/src/tests/ofc23/descriptors/emulated/old/descriptor_parent.json
new file mode 100644
index 000000000..413b75662
--- /dev/null
+++ b/src/tests/ofc23/descriptors/emulated/old/descriptor_parent.json
@@ -0,0 +1,311 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "TFS-IP"}}, "device_type": "teraflowsdn", "device_drivers": [7],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8002"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "scheme": "http", "username": "admin", "password": "admin"
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "MW1-2"}}, "device_type": "microwave-radio-system", "device_drivers": [5],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8443"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
+                    "node_ids": ["172.18.0.1", "172.18.0.2"]
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "MW3-4"}}, "device_type": "microwave-radio-system", "device_drivers": [5],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8443"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin", "timeout": 120, "scheme": "https",
+                    "node_ids": ["172.18.0.3", "172.18.0.4"]
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "OLS"}}, "device_type": "open-line-system", "device_drivers": [2],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "cttc-ols.cttc-ols.svc.cluster.local"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "4900"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"timeout": 120}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "IPM"}}, "device_type": "xr-constellation", "device_drivers": [6],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8444"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "xr-user-1", "password": "xr-user-1", "hub_module_name": "OFC HUB 1",
+                    "consistency-mode": "lifecycle", "import_topology": "devices"
+                }}}
+            ]}
+        },
+
+
+        {
+            "device_id": {"device_uuid": {"uuid": "DC1"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "device_type": "emu-optical-splitter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "optical/internal", "uuid": "common"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf1"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf2"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf3"},
+                    {"sample_types": [], "type": "optical/internal", "uuid": "leaf4"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "DC2"}}, "device_type": "emu-datacenter", "device_drivers": [0],
+            "device_endpoints": [], "device_operational_status": 0, "device_config": {"config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth1"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "eth2"},
+                    {"sample_types": [], "type": "copper/internal", "uuid": "int"}
+                ]}}}
+            ]}
+        }
+    ],
+    "links": [
+        {
+            "link_id": {"link_uuid": {"uuid": "DC1/eth1==PE1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE1/1/1==DC1/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "DC1/eth2==PE2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE2/1/1==DC1/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC1"}}, "endpoint_uuid": {"uuid": "eth2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE1/1/2==MW1-2/172.18.0.1:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.1:1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "MW1-2/172.18.0.1:1==PE1/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.1:1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE1"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "MW1-2/172.18.0.2:1==OFC HUB 1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.2:1"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/1/1==MW1-2/172.18.0.2:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "MW1-2"}}, "endpoint_uuid": {"uuid": "172.18.0.2:1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE2/1/2==MW3-4/172.18.0.3:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.3:1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "MW3-4/172.18.0.3:1==PE2/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.3:1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE2"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "MW3-4/172.18.0.4:1==OFC HUB 1/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.4:1"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/1/2==MW3-4/172.18.0.4:1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "MW3-4"}}, "endpoint_uuid": {"uuid": "172.18.0.4:1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC HUB 1/XR-T1==Optical-Splitter/common"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "common"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/common==OFC HUB 1/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "common"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC HUB 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/leaf1==OLS/aade6001-f00b-5e2f-a357-6a0a9d3de870"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "aade6001-f00b-5e2f-a357-6a0a9d3de870"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/79516f5e-55a0-5671-977a-1f5cc934e700==Optical-Splitter/leaf1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "79516f5e-55a0-5671-977a-1f5cc934e700"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "Optical-Splitter/leaf2==OLS/eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf2"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "eb287d83-f05e-53ec-ab5a-adf6bd2b5418"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/30d9323e-b916-51ce-a9a8-cf88f62eb77f==Optical-Splitter/leaf2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "30d9323e-b916-51ce-a9a8-cf88f62eb77f"}},
+                {"device_id": {"device_uuid": {"uuid": "Optical-Splitter"}}, "endpoint_uuid": {"uuid": "leaf2"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 1/XR-T1==OLS/0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "0ef74f99-1acc-57bd-ab9d-4b958b06c513"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/68ac012e-54d4-5846-b5dc-6ec356404f90==OFC LEAF 1/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "68ac012e-54d4-5846-b5dc-6ec356404f90"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 2/XR-T1==OLS/50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "XR-T1"}},
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "50296d99-58cc-5ce7-82f5-fc8ee4eec2ec"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "OLS/367b19b1-3172-54d8-bdd4-12d3ac5604f6==OFC LEAF 2/XR-T1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OLS"}}, "endpoint_uuid": {"uuid": "367b19b1-3172-54d8-bdd4-12d3ac5604f6"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "XR-T1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 1/1/1==PE3/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE3/1/2==OFC LEAF 1/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 1"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "OFC LEAF 2/1/1==PE4/1/2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "PE4/1/2==OFC LEAF 2/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/2"}},
+                {"device_id": {"device_uuid": {"uuid": "OFC LEAF 2"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE3/1/1==DC2/eth1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC2/eth1==PE3/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "PE3"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        },
+
+
+        {
+            "link_id": {"link_uuid": {"uuid": "PE4/1/1==DC2/eth2"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/1"}},
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "DC2/eth2==PE4/1/1"}}, "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "DC2"}}, "endpoint_uuid": {"uuid": "eth2"}},
+                {"device_id": {"device_uuid": {"uuid": "PE4"}}, "endpoint_uuid": {"uuid": "1/1"}}
+            ]
+        }
+    ]
+}
diff --git a/src/tests/ofc23/descriptors/real/descriptor_child.json b/src/tests/ofc23/descriptors/real/descriptor_child.json
index aa6d7bbd1..8d695cfd2 100644
--- a/src/tests/ofc23/descriptors/real/descriptor_child.json
+++ b/src/tests/ofc23/descriptors/real/descriptor_child.json
@@ -15,7 +15,7 @@
                     "username": "admin", "password": "admin",
                     "force_running": false, "hostkey_verify": false, "look_for_keys": false,
                     "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "huaweiyang"},
-                    "manager_params": {"timeout" : 120}
+                    "manager_params": {"timeout" : 86400}
                 }}}
             ]}
         },
@@ -28,7 +28,7 @@
                     "username": "admin", "password": "admin",
                     "force_running": false, "hostkey_verify": false, "look_for_keys": false,
                     "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "huaweiyang"},
-                    "manager_params": {"timeout" : 120}
+                    "manager_params": {"timeout" : 86400}
                 }}}
             ]}
         },
@@ -41,7 +41,7 @@
                     "username": "admin", "password": "admin",
                     "force_running": false, "hostkey_verify": false, "look_for_keys": false,
                     "allow_agent": false, "commit_per_rule": true, "device_params": {"name": "huaweiyang"},
-                    "manager_params": {"timeout" : 120}
+                    "manager_params": {"timeout" : 86400}
                 }}}
             ]}
         }
diff --git a/src/tests/ofc23/show_deploy_sligrp.sh b/src/tests/ofc23/show_deploy_sligrp.sh
new file mode 100755
index 000000000..b5e3600ba
--- /dev/null
+++ b/src/tests/ofc23/show_deploy_sligrp.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+echo "Deployment Resources:"
+kubectl --namespace tfs get all
+printf "\n"
+
+echo "Deployment Ingress:"
+kubectl --namespace tfs get ingress
+printf "\n"
-- 
GitLab


From 5901b3e9e70e81951f350a85ad0a25c8fedf5ab1 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Fri, 3 Mar 2023 13:45:03 +0000
Subject: [PATCH 203/229] Tool - Mock MW SDN Controller:

- Updated exposed topology
---
 .../tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py   | 48 +++++++++++++------
 1 file changed, 34 insertions(+), 14 deletions(-)

diff --git a/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
index 91542d85b..c20dde1b9 100644
--- a/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
+++ b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py
@@ -35,31 +35,51 @@ STR_ENDPOINT = 'https://{:s}:{:s}{:s}'.format(str(BIND_ADDRESS), str(BIND_PORT),
 LOG_LEVEL    = logging.DEBUG
 
 NETWORK_NODES = [
-    {'node-id': '172.18.0.1', 'ietf-network-topology:termination-point': [
+    {'node-id': '192.168.27.139', 'ietf-network-topology:termination-point': [
         {'tp-id': '1', 'ietf-te-topology:te': {'name': 'ethernet'}},
-        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'antena'  }},
+        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '3', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '4', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '5', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '6', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '10', 'ietf-te-topology:te': {'name': 'antena' }},
     ]},
-    {'node-id': '172.18.0.2', 'ietf-network-topology:termination-point': [
+    {'node-id': '192.168.27.140', 'ietf-network-topology:termination-point': [
         {'tp-id': '1', 'ietf-te-topology:te': {'name': 'ethernet'}},
-        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'antena'  }},
+        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '3', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '4', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '5', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '6', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '10', 'ietf-te-topology:te': {'name': 'antena' }},
     ]},
-    {'node-id': '172.18.0.3', 'ietf-network-topology:termination-point': [
+    {'node-id': '192.168.27.141', 'ietf-network-topology:termination-point': [
         {'tp-id': '1', 'ietf-te-topology:te': {'name': 'ethernet'}},
-        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'antena'  }},
+        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '3', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '4', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '5', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '6', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '10', 'ietf-te-topology:te': {'name': 'antena' }},
     ]},
-    {'node-id': '172.18.0.4', 'ietf-network-topology:termination-point': [
+    {'node-id': '192.168.27.142', 'ietf-network-topology:termination-point': [
         {'tp-id': '1', 'ietf-te-topology:te': {'name': 'ethernet'}},
-        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'antena'  }},
+        {'tp-id': '2', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '3', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '4', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '5', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '6', 'ietf-te-topology:te': {'name': 'ethernet'}},
+        {'tp-id': '10', 'ietf-te-topology:te': {'name': 'antena' }},
     ]}
 ]
 NETWORK_LINKS = [
-    {   'link-id'    : '172.18.0.1:2--172.18.0.2:2',
-        'source'     : {'source-node': '172.18.0.1', 'source-tp': '2'},
-        'destination': {'dest-node'  : '172.18.0.2', 'dest-tp'  : '2'},
+    {   'link-id'    : '192.168.27.139:10--192.168.27.140:10',
+        'source'     : {'source-node': '192.168.27.139', 'source-tp': '10'},
+        'destination': {'dest-node'  : '192.168.27.140', 'dest-tp'  : '10'},
     },
-    {   'link-id'    : '172.18.0.3:2--172.18.0.4:2',
-        'source'     : {'source-node': '172.18.0.3', 'source-tp': '2'},
-        'destination': {'dest-node'  : '172.18.0.4', 'dest-tp'  : '2'},
+    {   'link-id'    : '192.168.27.141:10--192.168.27.142:10',
+        'source'     : {'source-node': '192.168.27.141', 'source-tp': '10'},
+        'destination': {'dest-node'  : '192.168.27.142', 'dest-tp'  : '10'},
     }
 ]
 NETWORK_SERVICES = {}
-- 
GitLab


From ec53aaa825656d75f47d18bc39e01d5dc52f7f55 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Tue, 7 Mar 2023 23:28:02 +0000
Subject: [PATCH 204/229] Service component:

- Updated config rules for L2NM Emulated/OpenConfig Service Handlers
---
 .../l2nm_emulated/ConfigRules.py              | 64 +++++++++----------
 .../l2nm_openconfig/ConfigRules.py            | 51 ++++++++-------
 2 files changed, 57 insertions(+), 58 deletions(-)

diff --git a/src/service/service/service_handlers/l2nm_emulated/ConfigRules.py b/src/service/service/service_handlers/l2nm_emulated/ConfigRules.py
index 84467dd2d..363983b86 100644
--- a/src/service/service/service_handlers/l2nm_emulated/ConfigRules.py
+++ b/src/service/service/service_handlers/l2nm_emulated/ConfigRules.py
@@ -32,7 +32,7 @@ def setup_config_rules(
     #bgp_as              = json_settings.get('bgp_as',              0    )    # 65000
     #bgp_route_target    = json_settings.get('bgp_route_target',    '0:0')    # 65000:333
 
-    router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
+    #router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
     #route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
     sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
     vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
@@ -46,17 +46,17 @@ def setup_config_rules(
     connection_point_id   = 'VC-1'
 
     json_config_rules = [
-        json_config_rule_set(
-            '/network_instance[default]',
-            {'name': 'default', 'type': 'DEFAULT_INSTANCE', 'router_id': router_id}),
+        #json_config_rule_set(
+        #    '/network_instance[default]',
+        #    {'name': 'default', 'type': 'DEFAULT_INSTANCE', 'router_id': router_id}),
 
-        json_config_rule_set(
-            '/network_instance[default]/protocols[OSPF]',
-            {'name': 'default', 'identifier': 'OSPF', 'protocol_name': 'OSPF'}),
+        #json_config_rule_set(
+        #    '/network_instance[default]/protocols[OSPF]',
+        #    {'name': 'default', 'identifier': 'OSPF', 'protocol_name': 'OSPF'}),
 
-        json_config_rule_set(
-            '/network_instance[default]/protocols[STATIC]',
-            {'name': 'default', 'identifier': 'STATIC', 'protocol_name': 'STATIC'}),
+        #json_config_rule_set(
+        #    '/network_instance[default]/protocols[STATIC]',
+        #    {'name': 'default', 'identifier': 'STATIC', 'protocol_name': 'STATIC'}),
 
         json_config_rule_set(
             '/network_instance[{:s}]'.format(network_instance_name),
@@ -69,7 +69,7 @@ def setup_config_rules(
         json_config_rule_set(
             '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_cirid_name),
             {'name': network_instance_name, 'id': if_cirid_name, 'interface': if_cirid_name,
-            'subinterface': sub_interface_index}),
+             'subinterface': sub_interface_index}),
 
         json_config_rule_set(
             '/network_instance[{:s}]/connection_point[{:s}]'.format(network_instance_name, connection_point_id),
@@ -94,7 +94,7 @@ def teardown_config_rules(
     #bgp_as              = json_settings.get('bgp_as',              0    )    # 65000
     #bgp_route_target    = json_settings.get('bgp_route_target',    '0:0')    # 65000:333
 
-    router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
+    #router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
     #route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
     sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
     #vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
@@ -105,36 +105,36 @@ def teardown_config_rules(
 
     if_cirid_name         = '{:s}.{:s}'.format(endpoint_name, str(circuit_id))
     network_instance_name = 'ELAN-AC:{:s}'.format(str(circuit_id))
-    connection_point_id   = 'VC-1'
+    #connection_point_id   = 'VC-1'
 
     json_config_rules = [
-        json_config_rule_delete(
-            '/network_instance[{:s}]/connection_point[{:s}]'.format(network_instance_name, connection_point_id),
-            {'name': network_instance_name, 'connection_point': connection_point_id}),
-
-        json_config_rule_delete(
-            '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_cirid_name),
-            {'name': network_instance_name, 'id': if_cirid_name, 'interface': if_cirid_name,
-            'subinterface': sub_interface_index}),
+        #json_config_rule_delete(
+        #    '/network_instance[{:s}]/connection_point[{:s}]'.format(network_instance_name, connection_point_id),
+        #    {'name': network_instance_name, 'connection_point': connection_point_id}),
 
-        json_config_rule_delete(
-            '/interface[{:s}]/subinterface[{:d}]'.format(if_cirid_name, sub_interface_index),
-            {'name': if_cirid_name, 'index': sub_interface_index}),
+        #json_config_rule_delete(
+        #    '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_cirid_name),
+        #    {'name': network_instance_name, 'id': if_cirid_name, 'interface': if_cirid_name,
+        #    'subinterface': sub_interface_index}),
 
         json_config_rule_delete(
             '/network_instance[{:s}]'.format(network_instance_name),
             {'name': network_instance_name}),
 
         json_config_rule_delete(
-            '/network_instance[default]/protocols[STATIC]',
-            {'name': 'default', 'identifier': 'STATIC', 'protocol_name': 'STATIC'}),
+            '/interface[{:s}]/subinterface[{:d}]'.format(if_cirid_name, sub_interface_index),
+            {'name': if_cirid_name, 'index': sub_interface_index}),
 
-        json_config_rule_delete(
-            '/network_instance[default]/protocols[OSPF]',
-            {'name': 'default', 'identifier': 'OSPF', 'protocol_name': 'OSPF'}),
+        #json_config_rule_delete(
+        #    '/network_instance[default]/protocols[STATIC]',
+        #    {'name': 'default', 'identifier': 'STATIC', 'protocol_name': 'STATIC'}),
 
-        json_config_rule_delete(
-            '/network_instance[default]',
-            {'name': 'default', 'type': 'DEFAULT_INSTANCE', 'router_id': router_id}),
+        #json_config_rule_delete(
+        #    '/network_instance[default]/protocols[OSPF]',
+        #    {'name': 'default', 'identifier': 'OSPF', 'protocol_name': 'OSPF'}),
+
+        #json_config_rule_delete(
+        #    '/network_instance[default]',
+        #    {'name': 'default', 'type': 'DEFAULT_INSTANCE', 'router_id': router_id}),
     ]
     return json_config_rules
diff --git a/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py b/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
index f3f00a3bd..63e818a83 100644
--- a/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
+++ b/src/service/service/service_handlers/l2nm_openconfig/ConfigRules.py
@@ -20,7 +20,7 @@ def setup_config_rules(
     service_uuid : str, connection_uuid : str, device_uuid : str, endpoint_uuid : str, endpoint_name : str,
     service_settings : TreeNode, endpoint_settings : TreeNode
 ) -> List[Dict]:
-    
+
     if service_settings  is None: return []
     if endpoint_settings is None: return []
 
@@ -49,31 +49,21 @@ def setup_config_rules(
 
         json_config_rule_set(
             '/network_instance[{:s}]'.format(network_instance_name),
-            {'name': network_instance_name, 
-             'type': 'L2VSI'}),
+            {'name': network_instance_name, 'type': 'L2VSI'}),
 
         json_config_rule_set(
-            '/interface[{:s}]/subinterface[0]'.format(if_cirid_name),
-            {'name': if_cirid_name, 
-             'type': 'l2vlan', 
-             'index': sub_interface_index, 
-             'vlan_id': vlan_id}),
+            '/interface[{:s}]/subinterface[{:d}]'.format(if_cirid_name, sub_interface_index),
+            {'name': if_cirid_name, 'type': 'l2vlan', 'index': sub_interface_index, 'vlan_id': vlan_id}),
 
         json_config_rule_set(
             '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_cirid_name),
-            {'name': network_instance_name, 
-             'id': if_cirid_name, 
-             'interface': if_cirid_name,
-             'subinterface': 0
-            }),
+            {'name': network_instance_name, 'id': if_cirid_name, 'interface': if_cirid_name,
+             'subinterface': sub_interface_index}),
 
         json_config_rule_set(
             '/network_instance[{:s}]/connection_point[{:s}]'.format(network_instance_name, connection_point_id),
-            {'name': network_instance_name, 
-             'connection_point': connection_point_id, 
-             'VC_ID': circuit_id,
-             'remote_system': remote_router
-            }),
+            {'name': network_instance_name, 'connection_point': connection_point_id, 'VC_ID': circuit_id,
+             'remote_system': remote_router}),
     ]
     return json_config_rules
 
@@ -95,7 +85,7 @@ def teardown_config_rules(
 
     #router_id           = json_endpoint_settings.get('router_id',           '0.0.0.0')  # '10.95.0.10'
     #route_distinguisher = json_endpoint_settings.get('route_distinguisher', '0:0'    )  # '60001:801'
-    #sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
+    sub_interface_index = json_endpoint_settings.get('sub_interface_index', 0        )  # 1
     #vlan_id             = json_endpoint_settings.get('vlan_id',             1        )  # 400
     #address_ip          = json_endpoint_settings.get('address_ip',          '0.0.0.0')  # '2.2.2.1'
     #address_prefix      = json_endpoint_settings.get('address_prefix',      24       )  # 30
@@ -104,17 +94,26 @@ def teardown_config_rules(
 
     if_cirid_name         = '{:s}.{:s}'.format(endpoint_name, str(circuit_id))
     network_instance_name = 'ELAN-AC:{:s}'.format(str(circuit_id))
-    #connection_point_id   = 'VC-1'
+    connection_point_id   = 'VC-1'
 
     json_config_rules = [
+
+        json_config_rule_delete(
+            '/network_instance[{:s}]/connection_point[{:s}]'.format(network_instance_name, connection_point_id),
+            {'name': network_instance_name, 'connection_point': connection_point_id, 'VC_ID': circuit_id}),
+
+        json_config_rule_delete(
+            '/network_instance[{:s}]/interface[{:s}]'.format(network_instance_name, if_cirid_name),
+            {'name': network_instance_name, 'id': if_cirid_name, 'interface': if_cirid_name,
+             'subinterface': sub_interface_index}),
+
+        json_config_rule_delete(
+            '/interface[{:s}]/subinterface[{:d}]'.format(if_cirid_name, sub_interface_index),
+            {'name': if_cirid_name, 'index': sub_interface_index}),
+
         json_config_rule_delete(
             '/network_instance[{:s}]'.format(network_instance_name),
             {'name': network_instance_name}),
-        
-        json_config_rule_delete(
-            '/interface[{:s}]/subinterface[0]'.format(if_cirid_name),{
-            'name': if_cirid_name,
-        }),
-        
+
     ]
     return json_config_rules
-- 
GitLab


From dabbc5484b266b9ce93f54280bdd93f546f0f343 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Wed, 8 Mar 2023 22:18:57 +0000
Subject: [PATCH 205/229] Slice component:

- Remove workaround for OFC'23 demo to auto-start slice grouping
---
 src/slice/service/slice_grouper/Tools.py | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/src/slice/service/slice_grouper/Tools.py b/src/slice/service/slice_grouper/Tools.py
index d5a78ba2b..c635ffcf4 100644
--- a/src/slice/service/slice_grouper/Tools.py
+++ b/src/slice/service/slice_grouper/Tools.py
@@ -31,11 +31,6 @@ NO_ISOLATION = IsolationLevelEnum.NO_ISOLATION
 LOGGER = logging.getLogger(__name__)
 
 def is_slice_grouping_enabled() -> bool:
-    # Temporal hack for OFC'23 multi-demo:
-    metricsdb_hostname = get_setting('METRICSDB_HOSTNAME', default='')
-    LOGGER.warning('metricsdb_hostname={:s}'.format(str(metricsdb_hostname)))
-    if '.qdb-sligrp.' in metricsdb_hostname: return True
-    # end hack
     is_enabled = get_setting(SETTING_NAME_SLICE_GROUPING, default=None)
     if is_enabled is None: return False
     str_is_enabled = str(is_enabled).upper()
-- 
GitLab


From 19e76285fc2ab90f3506ca98d78c0136dca1eaf8 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Mar 2023 07:42:06 +0000
Subject: [PATCH 206/229] Manifests:

- Corrected definition of webui and compute manifests
- Reduced requested quota
---
 manifests/computeservice.yaml | 11 +++++++----
 manifests/webuiservice.yaml   | 17 ++++++++++-------
 2 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/manifests/computeservice.yaml b/manifests/computeservice.yaml
index 7e40ef988..378e34b9b 100644
--- a/manifests/computeservice.yaml
+++ b/manifests/computeservice.yaml
@@ -20,6 +20,7 @@ spec:
   selector:
     matchLabels:
       app: computeservice
+  replicas: 1
   template:
     metadata:
       labels:
@@ -44,16 +45,18 @@ spec:
             command: ["/bin/grpc_health_probe", "-addr=:9090"]
         resources:
           requests:
-            cpu: 250m
-            memory: 512Mi
+            cpu: 50m
+            memory: 64Mi
           limits:
-            cpu: 700m
-            memory: 1024Mi
+            cpu: 500m
+            memory: 512Mi
 ---
 apiVersion: v1
 kind: Service
 metadata:
   name: computeservice
+  labels:
+    app: computeservice
 spec:
   type: ClusterIP
   selector:
diff --git a/manifests/webuiservice.yaml b/manifests/webuiservice.yaml
index f25dbf6e5..234075f73 100644
--- a/manifests/webuiservice.yaml
+++ b/manifests/webuiservice.yaml
@@ -20,6 +20,7 @@ spec:
   selector:
     matchLabels:
       app: webuiservice
+  replicas: 1
   template:
     metadata:
       labels:
@@ -55,11 +56,11 @@ spec:
           timeoutSeconds: 1
         resources:
           requests:
-            cpu: 100m
-            memory: 512Mi
+            cpu: 50m
+            memory: 64Mi
           limits:
-            cpu: 700m
-            memory: 1024Mi
+            cpu: 500m
+            memory: 512Mi
       - name: grafana
         image: grafana/grafana:8.5.11
         imagePullPolicy: IfNotPresent
@@ -92,16 +93,18 @@ spec:
           timeoutSeconds: 1
         resources:
           requests:
-            cpu: 250m
-            memory: 750Mi
+            cpu: 150m
+            memory: 512Mi
           limits:
-            cpu: 700m
+            cpu: 500m
             memory: 1024Mi
 ---
 apiVersion: v1
 kind: Service
 metadata:
   name: webuiservice
+  labels:
+    app: webuiservice
 spec:
   type: ClusterIP
   selector:
-- 
GitLab


From 6091ecffd4d6c549dc836f29ac702e37b615c07c Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Mar 2023 07:51:05 +0000
Subject: [PATCH 207/229] Context component:

- Fixed composition of PolicyRule messages
- Added position of endpoints in Link, Service, and Slice.
- Added sort of endpoints according to their position.
---
 src/context/service/database/Link.py                   |  3 ++-
 src/context/service/database/Service.py                |  1 +
 src/context/service/database/Slice.py                  |  1 +
 src/context/service/database/models/LinkModel.py       | 10 ++++++++--
 src/context/service/database/models/PolicyRuleModel.py |  2 +-
 src/context/service/database/models/ServiceModel.py    |  9 +++++++--
 src/context/service/database/models/SliceModel.py      |  9 +++++++--
 7 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/src/context/service/database/Link.py b/src/context/service/database/Link.py
index 8d195cb1d..299827dbd 100644
--- a/src/context/service/database/Link.py
+++ b/src/context/service/database/Link.py
@@ -64,13 +64,14 @@ def link_set(db_engine : Engine, request : Link) -> Tuple[Dict, bool]:
     topology_uuids : Set[str] = set()
     related_topologies : List[Dict] = list()
     link_endpoints_data : List[Dict] = list()
-    for endpoint_id in request.link_endpoint_ids:
+    for i,endpoint_id in enumerate(request.link_endpoint_ids):
         endpoint_topology_uuid, _, endpoint_uuid = endpoint_get_uuid(
             endpoint_id, allow_random=False)
 
         link_endpoints_data.append({
             'link_uuid'    : link_uuid,
             'endpoint_uuid': endpoint_uuid,
+            'position'     : i,
         })
 
         if endpoint_topology_uuid not in topology_uuids:
diff --git a/src/context/service/database/Service.py b/src/context/service/database/Service.py
index a81a80c3c..fe12eaf8a 100644
--- a/src/context/service/database/Service.py
+++ b/src/context/service/database/Service.py
@@ -91,6 +91,7 @@ def service_set(db_engine : Engine, request : Service) -> Tuple[Dict, bool]:
         service_endpoints_data.append({
             'service_uuid' : service_uuid,
             'endpoint_uuid': endpoint_uuid,
+            'position'     : i,
         })
 
     constraints = compose_constraints_data(request.service_constraints, now, service_uuid=service_uuid)
diff --git a/src/context/service/database/Slice.py b/src/context/service/database/Slice.py
index 1d6781d53..724046bfa 100644
--- a/src/context/service/database/Slice.py
+++ b/src/context/service/database/Slice.py
@@ -91,6 +91,7 @@ def slice_set(db_engine : Engine, request : Slice) -> Tuple[Dict, bool]:
         slice_endpoints_data.append({
             'slice_uuid'   : slice_uuid,
             'endpoint_uuid': endpoint_uuid,
+            'position'     : i,
         })
 
     slice_services_data : List[Dict] = list()
diff --git a/src/context/service/database/models/LinkModel.py b/src/context/service/database/models/LinkModel.py
index ee591f5c8..e9fd9bc87 100644
--- a/src/context/service/database/models/LinkModel.py
+++ b/src/context/service/database/models/LinkModel.py
@@ -12,7 +12,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from sqlalchemy import Column, DateTime, ForeignKey, String
+import operator
+from sqlalchemy import CheckConstraint, Column, DateTime, ForeignKey, Integer, String
 from sqlalchemy.dialects.postgresql import UUID
 from sqlalchemy.orm import relationship
 from typing import Dict
@@ -38,7 +39,7 @@ class LinkModel(_Base):
             'name'             : self.link_name,
             'link_endpoint_ids': [
                 link_endpoint.endpoint.dump_id()
-                for link_endpoint in self.link_endpoints
+                for link_endpoint in sorted(self.link_endpoints, key=operator.attrgetter('position'))
             ],
         }
 
@@ -47,6 +48,11 @@ class LinkEndPointModel(_Base):
 
     link_uuid     = Column(ForeignKey('link.link_uuid',         ondelete='CASCADE' ), primary_key=True)
     endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
+    position      = Column(Integer, nullable=False)
 
     link     = relationship('LinkModel',     back_populates='link_endpoints', lazy='joined')
     endpoint = relationship('EndPointModel', lazy='joined') # back_populates='link_endpoints'
+
+    __table_args__ = (
+        CheckConstraint(position >= 0, name='check_position_value'),
+    )
diff --git a/src/context/service/database/models/PolicyRuleModel.py b/src/context/service/database/models/PolicyRuleModel.py
index 2f0c8a326..663a9a39a 100644
--- a/src/context/service/database/models/PolicyRuleModel.py
+++ b/src/context/service/database/models/PolicyRuleModel.py
@@ -64,7 +64,7 @@ class PolicyRuleModel(_Base):
             'deviceList': [{'device_uuid': {'uuid': pr_d.device_uuid}} for pr_d in self.policyrule_devices],
         }
         if self.policyrule_kind == PolicyRuleKindEnum.SERVICE:
-            result['serviceId'] = self.policyrule_service.dump_id(),
+            result['serviceId'] = self.policyrule_service.dump_id()
         return {self.policyrule_kind.value: result}
 
 class PolicyRuleDeviceModel(_Base):
diff --git a/src/context/service/database/models/ServiceModel.py b/src/context/service/database/models/ServiceModel.py
index 09ff381b5..f1781c4f8 100644
--- a/src/context/service/database/models/ServiceModel.py
+++ b/src/context/service/database/models/ServiceModel.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 import operator
-from sqlalchemy import Column, DateTime, Enum, ForeignKey, String
+from sqlalchemy import CheckConstraint, Column, DateTime, Enum, ForeignKey, Integer, String
 from sqlalchemy.dialects.postgresql import UUID
 from sqlalchemy.orm import relationship
 from typing import Dict
@@ -51,7 +51,7 @@ class ServiceModel(_Base):
             'service_status'      : {'service_status': self.service_status.value},
             'service_endpoint_ids': [
                 service_endpoint.endpoint.dump_id()
-                for service_endpoint in self.service_endpoints
+                for service_endpoint in sorted(self.service_endpoints, key=operator.attrgetter('position'))
             ],
             'service_constraints' : [
                 constraint.dump()
@@ -68,6 +68,11 @@ class ServiceEndPointModel(_Base):
 
     service_uuid  = Column(ForeignKey('service.service_uuid',   ondelete='CASCADE' ), primary_key=True)
     endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
+    position      = Column(Integer, nullable=False)
 
     service  = relationship('ServiceModel',  back_populates='service_endpoints', lazy='joined')
     endpoint = relationship('EndPointModel', lazy='joined') # back_populates='service_endpoints'
+
+    __table_args__ = (
+        CheckConstraint(position >= 0, name='check_position_value'),
+    )
diff --git a/src/context/service/database/models/SliceModel.py b/src/context/service/database/models/SliceModel.py
index 2d6c88416..7f1550eb2 100644
--- a/src/context/service/database/models/SliceModel.py
+++ b/src/context/service/database/models/SliceModel.py
@@ -13,7 +13,7 @@
 # limitations under the License.
 
 import operator
-from sqlalchemy import Column, DateTime, Enum, ForeignKey, String
+from sqlalchemy import CheckConstraint, Column, DateTime, Enum, ForeignKey, Integer, String
 from sqlalchemy.dialects.postgresql import UUID
 from sqlalchemy.orm import relationship
 from typing import Dict
@@ -53,7 +53,7 @@ class SliceModel(_Base):
             'slice_status'      : {'slice_status': self.slice_status.value},
             'slice_endpoint_ids': [
                 slice_endpoint.endpoint.dump_id()
-                for slice_endpoint in self.slice_endpoints
+                for slice_endpoint in sorted(self.slice_endpoints, key=operator.attrgetter('position'))
             ],
             'slice_constraints' : [
                 constraint.dump()
@@ -82,10 +82,15 @@ class SliceEndPointModel(_Base):
 
     slice_uuid    = Column(ForeignKey('slice.slice_uuid',       ondelete='CASCADE' ), primary_key=True)
     endpoint_uuid = Column(ForeignKey('endpoint.endpoint_uuid', ondelete='RESTRICT'), primary_key=True, index=True)
+    position      = Column(Integer, nullable=False)
 
     slice    = relationship('SliceModel', back_populates='slice_endpoints', lazy='joined')
     endpoint = relationship('EndPointModel', lazy='joined') # back_populates='slice_endpoints'
 
+    __table_args__ = (
+        CheckConstraint(position >= 0, name='check_position_value'),
+    )
+
 class SliceServiceModel(_Base):
     __tablename__ = 'slice_service'
 
-- 
GitLab


From bfa801f7f20cc51f4abed6e019f65530d143cb07 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Mar 2023 08:30:10 +0000
Subject: [PATCH 208/229] Device component - IETF L2VPN driver:

- Pre-merge code cleanup
---
 .../drivers/ietf_l2vpn/IetfL2VpnDriver.py     |  12 +-
 .../service/drivers/ietf_l2vpn/Tools.py       | 136 ------------------
 2 files changed, 2 insertions(+), 146 deletions(-)

diff --git a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
index e08b7625b..96dfd2c15 100644
--- a/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
+++ b/src/device/service/drivers/ietf_l2vpn/IetfL2VpnDriver.py
@@ -25,14 +25,6 @@ from .WimconnectorIETFL2VPN import WimconnectorIETFL2VPN
 
 LOGGER = logging.getLogger(__name__)
 
-def process_connectivity_services(method : str, services : Any) -> Any:
-    LOGGER.warning('[{:s}][process_connectivity_services] services={:s}'.format(str(method), str(services)))
-    return services
-
-def process_connectivity_service(method : str, service : Any) -> Any:
-    LOGGER.warning('[{:s}][process_connectivity_service] service={:s}'.format(str(method), str(service)))
-    return service
-
 def service_exists(wim : WimconnectorIETFL2VPN, service_uuid : str) -> bool:
     try:
         wim.get_connectivity_service_status(service_uuid)
@@ -103,11 +95,11 @@ class IetfL2VpnDriver(_Driver):
                     elif resource_key == RESOURCE_SERVICES:
                         # return all services through 
                         reply = self.wim.get_all_active_connectivity_services()
-                        results.extend(process_connectivity_services('GetConfig', reply.json()))
+                        results.extend(reply.json())
                     else:
                         # assume single-service retrieval
                         reply = self.wim.get_connectivity_service(resource_key)
-                        results.append(process_connectivity_service('GetConfig', reply.json()))
+                        results.append(reply.json())
                 except Exception as e: # pylint: disable=broad-except
                     LOGGER.exception('Unhandled error processing resource_key({:s})'.format(str(resource_key)))
                     results.append((resource_key, e))
diff --git a/src/device/service/drivers/ietf_l2vpn/Tools.py b/src/device/service/drivers/ietf_l2vpn/Tools.py
index 8188c77df..45dfa23c9 100644
--- a/src/device/service/drivers/ietf_l2vpn/Tools.py
+++ b/src/device/service/drivers/ietf_l2vpn/Tools.py
@@ -12,143 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import json, logging, operator, requests
-from requests.auth import HTTPBasicAuth
 from typing import Dict, Optional
-from device.service.driver_api._Driver import RESOURCE_ENDPOINTS
-
-LOGGER = logging.getLogger(__name__)
-
-HTTP_OK_CODES = {
-    200,    # OK
-    201,    # Created
-    202,    # Accepted
-    204,    # No Content
-}
-
-def find_key(resource, key):
-    return json.loads(resource[1])[key]
-
-
-def config_getter(
-    root_url : str, resource_key : str, auth : Optional[HTTPBasicAuth] = None, timeout : Optional[int] = None
-):
-    url = '{:s}/restconf/data/tapi-common:context'.format(root_url)
-    result = []
-    try:
-        response = requests.get(url, timeout=timeout, verify=False, auth=auth)
-    except requests.exceptions.Timeout:
-        LOGGER.exception('Timeout connecting {:s}'.format(url))
-        return result
-    except Exception as e:  # pylint: disable=broad-except
-        LOGGER.exception('Exception retrieving {:s}'.format(resource_key))
-        result.append((resource_key, e))
-        return result
-
-    try:
-        context = json.loads(response.content)
-    except Exception as e:  # pylint: disable=broad-except
-        LOGGER.warning('Unable to decode reply: {:s}'.format(str(response.content)))
-        result.append((resource_key, e))
-        return result
-
-    if resource_key != RESOURCE_ENDPOINTS: return result
-
-    if 'tapi-common:context' in context:
-        context = context['tapi-common:context']
-    elif 'context' in context:
-        context = context['context']
-
-    for sip in context['service-interface-point']:
-        layer_protocol_name = sip.get('layer-protocol-name', '?')
-        supportable_spectrum = sip.get('tapi-photonic-media:media-channel-service-interface-point-spec', {})
-        supportable_spectrum = supportable_spectrum.get('mc-pool', {})
-        supportable_spectrum = supportable_spectrum.get('supportable-spectrum', [])
-        supportable_spectrum = supportable_spectrum[0] if len(supportable_spectrum) == 1 else {}
-        grid_type = supportable_spectrum.get('frequency-constraint', {}).get('grid-type')
-        granularity = supportable_spectrum.get('frequency-constraint', {}).get('adjustment-granularity')
-        direction = sip.get('direction', '?')
-        endpoint_type = [layer_protocol_name, grid_type, granularity, direction]
-        str_endpoint_type = ':'.join(filter(lambda i: operator.is_not(i, None), endpoint_type))
-        endpoint_url = '/endpoints/endpoint[{:s}]'.format(sip['uuid'])
-        endpoint_data = {'uuid': sip['uuid'], 'type': str_endpoint_type}
-        result.append((endpoint_url, endpoint_data))
-
-    return result
-
-def create_connectivity_service(
-    root_url, uuid, input_sip, output_sip, direction, capacity_value, capacity_unit, layer_protocol_name,
-    layer_protocol_qualifier,
-    auth : Optional[HTTPBasicAuth] = None, timeout : Optional[int] = None
-):
-
-    url = '{:s}/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context'.format(root_url)
-    headers = {'content-type': 'application/json'}
-    data = {
-        'tapi-connectivity:connectivity-service': [
-            {
-                'uuid': uuid,
-                'connectivity-constraint': {
-                    'requested-capacity': {
-                        'total-size': {
-                            'value': capacity_value,
-                            'unit': capacity_unit
-                        }
-                    },
-                    'connectivity-direction': direction
-                },
-                'end-point': [
-                    {
-                        'service-interface-point': {
-                            'service-interface-point-uuid': input_sip
-                        },
-                        'layer-protocol-name': layer_protocol_name,
-                        'layer-protocol-qualifier': layer_protocol_qualifier,
-                        'local-id': input_sip
-                    },
-                    {
-                        'service-interface-point': {
-                            'service-interface-point-uuid': output_sip
-                        },
-                        'layer-protocol-name': layer_protocol_name,
-                        'layer-protocol-qualifier': layer_protocol_qualifier,
-                        'local-id': output_sip
-                    }
-                ]
-            }
-        ]
-    }
-    results = []
-    try:
-        LOGGER.info('Connectivity service {:s}: {:s}'.format(str(uuid), str(data)))
-        response = requests.post(
-            url=url, data=json.dumps(data), timeout=timeout, headers=headers, verify=False, auth=auth)
-        LOGGER.info('TAPI response: {:s}'.format(str(response)))
-    except Exception as e:  # pylint: disable=broad-except
-        LOGGER.exception('Exception creating ConnectivityService(uuid={:s}, data={:s})'.format(str(uuid), str(data)))
-        results.append(e)
-    else:
-        if response.status_code not in HTTP_OK_CODES:
-            msg = 'Could not create ConnectivityService(uuid={:s}, data={:s}). status_code={:s} reply={:s}'
-            LOGGER.error(msg.format(str(uuid), str(data), str(response.status_code), str(response)))
-        results.append(response.status_code in HTTP_OK_CODES)
-    return results
-
-def delete_connectivity_service(root_url, uuid, auth : Optional[HTTPBasicAuth] = None, timeout : Optional[int] = None):
-    url = '{:s}/restconf/data/tapi-common:context/tapi-connectivity:connectivity-context/connectivity-service={:s}'
-    url = url.format(root_url, uuid)
-    results = []
-    try:
-        response = requests.delete(url=url, timeout=timeout, verify=False, auth=auth)
-    except Exception as e:  # pylint: disable=broad-except
-        LOGGER.exception('Exception deleting ConnectivityService(uuid={:s})'.format(str(uuid)))
-        results.append(e)
-    else:
-        if response.status_code not in HTTP_OK_CODES:
-            msg = 'Could not delete ConnectivityService(uuid={:s}). status_code={:s} reply={:s}'
-            LOGGER.error(msg.format(str(uuid), str(response.status_code), str(response)))
-        results.append(response.status_code in HTTP_OK_CODES)
-    return results
 
 def compose_service_endpoint_id(site_id : str, endpoint_id : Dict):
     device_uuid = endpoint_id['device_id']['device_uuid']['uuid']
-- 
GitLab


From 974acf01665fa16e88dd017c0bd5ab81cc5e7fb2 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Mar 2023 09:25:09 +0000
Subject: [PATCH 209/229] Slice component:

- Pre-merge code cleanup
---
 src/slice/service/slice_grouper/Tools.py | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/src/slice/service/slice_grouper/Tools.py b/src/slice/service/slice_grouper/Tools.py
index c635ffcf4..ca957f3c7 100644
--- a/src/slice/service/slice_grouper/Tools.py
+++ b/src/slice/service/slice_grouper/Tools.py
@@ -12,7 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import logging
 from typing import Dict, List, Optional, Set, Tuple
 from common.Constants import DEFAULT_CONTEXT_NAME
 from common.Settings import get_setting
@@ -28,8 +27,6 @@ TRUE_VALUES = {'Y', 'YES', 'TRUE', 'T', 'E', 'ENABLE', 'ENABLED'}
 
 NO_ISOLATION = IsolationLevelEnum.NO_ISOLATION
 
-LOGGER = logging.getLogger(__name__)
-
 def is_slice_grouping_enabled() -> bool:
     is_enabled = get_setting(SETTING_NAME_SLICE_GROUPING, default=None)
     if is_enabled is None: return False
-- 
GitLab


From cb1721a57b9f8292d8343cb4a75ada48bdc0086e Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Mar 2023 09:31:31 +0000
Subject: [PATCH 210/229] Tests - Tools - Mock MW SDN Ctrl:

- Pre-merge file cleanup
---
 src/tests/tools/mock_mw_sdn_ctrl/TODO.txt | 9 ---------
 1 file changed, 9 deletions(-)
 delete mode 100644 src/tests/tools/mock_mw_sdn_ctrl/TODO.txt

diff --git a/src/tests/tools/mock_mw_sdn_ctrl/TODO.txt b/src/tests/tools/mock_mw_sdn_ctrl/TODO.txt
deleted file mode 100644
index db764fcf2..000000000
--- a/src/tests/tools/mock_mw_sdn_ctrl/TODO.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-extend discovery of mgmt VLANs
-
->>> import requests
->>> from requests.auth import HTTPBasicAuth
->>> url = 'https://192.168.27.136:8443/nmswebs/restconf/data/ietf-eth-tran-service:etht-svc'
->>> auth = HTTPBasicAuth('nms5ux', 'nms5ux')
->>> response = requests.get(url, timeout=120, verify=False, auth=auth)
->>> response.content
-{"ietf-eth-tran-service:etht-svc":{"etht-svc-instances":[{"te-topology-identifier":{"topology-id":"eth-native-topology","client-id":3373,"provider-id":3373},"etht-svc-name":"MGMT-VLAN-192-168-27-139","admin-status":"ietf-te-types:tunnel-state-up","etht-svc-type":"ietf-eth-tran-types:p2p-svc","etht-svc-end-points":[{"etht-svc-access-points":[{"access-node-id":"192.168.27.139","access-ltp-id":3,"access-point-id":"1"}],"outer-tag":{"vlan-value":100,"tag-type":"ietf-eth-tran-types:classify-c-vlan"},"etht-svc-end-point-name":"192.168.27.139:3","service-classification-type":"ietf-eth-tran-types:port-classification"}],"state":{"operational-state":"ietf-te-types:tunnel-state-up","provisioning-state":"ietf-te-types:lsp-state-up"}},{"te-topology-identifier":{"topology-id":"eth-native-topology","client-id":3373,"provider-id":3373},"etht-svc-name":"MGMT-VLAN-192-168-27-140","admin-status":"ietf-te-types:tunnel-state-up","etht-svc-type":"ietf-eth-tran-types:p2p-svc","etht-svc-end-points":[{"etht-svc-access-points":[{"access-node-id":"192.168.27.140","access-ltp-id":3,"access-point-id":"1"}],"outer-tag":{"vlan-value":100,"tag-type":"ietf-eth-tran-types:classify-c-vlan"},"etht-svc-end-point-name":"192.168.27.140:3","service-classification-type":"ietf-eth-tran-types:vlan-classification"}],"state":{"operational-state":"ietf-te-types:tunnel-state-up","provisioning-state":"ietf-te-types:lsp-state-up"}}],"globals":{}}}
-- 
GitLab


From 01e6cdb7d5023c1cc587de9ec1ae2adb741f43cb Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Mar 2023 09:39:43 +0000
Subject: [PATCH 211/229] Show Log Scripts:

- Added flags to specify target container to retrieve log
---
 scripts/show_logs_compute.sh        | 2 +-
 scripts/show_logs_device.sh         | 2 +-
 scripts/show_logs_load_generator.sh | 2 +-
 scripts/show_logs_monitoring.sh     | 2 +-
 scripts/show_logs_service.sh        | 2 +-
 scripts/show_logs_slice.sh          | 2 +-
 6 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/scripts/show_logs_compute.sh b/scripts/show_logs_compute.sh
index fc992eb43..f0c24b63a 100755
--- a/scripts/show_logs_compute.sh
+++ b/scripts/show_logs_compute.sh
@@ -24,4 +24,4 @@ export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
 # Automated steps start here
 ########################################################################################################################
 
-kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/computeservice
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/computeservice -c server
diff --git a/scripts/show_logs_device.sh b/scripts/show_logs_device.sh
index 6a77c3815..e643f563a 100755
--- a/scripts/show_logs_device.sh
+++ b/scripts/show_logs_device.sh
@@ -24,4 +24,4 @@ export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
 # Automated steps start here
 ########################################################################################################################
 
-kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/deviceservice
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/deviceservice -c server
diff --git a/scripts/show_logs_load_generator.sh b/scripts/show_logs_load_generator.sh
index d0f2527d7..51438f181 100755
--- a/scripts/show_logs_load_generator.sh
+++ b/scripts/show_logs_load_generator.sh
@@ -24,4 +24,4 @@ export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
 # Automated steps start here
 ########################################################################################################################
 
-kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/load-generatorservice
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/load-generatorservice -c server
diff --git a/scripts/show_logs_monitoring.sh b/scripts/show_logs_monitoring.sh
index 1a152a322..61b0b5cc0 100755
--- a/scripts/show_logs_monitoring.sh
+++ b/scripts/show_logs_monitoring.sh
@@ -24,4 +24,4 @@ export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
 # Automated steps start here
 ########################################################################################################################
 
-kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/monitoringservice server
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/monitoringservice -c server
diff --git a/scripts/show_logs_service.sh b/scripts/show_logs_service.sh
index 7ca1c1c2f..cc75e19c6 100755
--- a/scripts/show_logs_service.sh
+++ b/scripts/show_logs_service.sh
@@ -24,4 +24,4 @@ export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
 # Automated steps start here
 ########################################################################################################################
 
-kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/serviceservice
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/serviceservice -c server
diff --git a/scripts/show_logs_slice.sh b/scripts/show_logs_slice.sh
index c71bc92ea..7fa8091cc 100755
--- a/scripts/show_logs_slice.sh
+++ b/scripts/show_logs_slice.sh
@@ -24,4 +24,4 @@ export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
 # Automated steps start here
 ########################################################################################################################
 
-kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/sliceservice
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/sliceservice -c server
-- 
GitLab


From d9cc9e2116be76bdb48bb69b2e342b4f985041f7 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Mar 2023 09:40:30 +0000
Subject: [PATCH 212/229] PathComp component - FrontEnd:

- Moved compute subservices test to tests folder
---
 .../frontend/tests/test_pathcomp}/__init__.py |   0
 .../frontend/tests/test_pathcomp}/__main__.py |   2 +-
 .../frontend/tests/test_pathcomp}/data.py     |   0
 test_pathcomp/ComputeSubServices.py           | 135 ------------------
 test_pathcomp/ResourceGroups.py               |  93 ------------
 test_pathcomp/ServiceTypes.py                 |  53 -------
 test_pathcomp/old_ComputeSubServices.py       | 119 ---------------
 7 files changed, 1 insertion(+), 401 deletions(-)
 rename {test_pathcomp => src/pathcomp/frontend/tests/test_pathcomp}/__init__.py (100%)
 rename {test_pathcomp => src/pathcomp/frontend/tests/test_pathcomp}/__main__.py (91%)
 rename {test_pathcomp => src/pathcomp/frontend/tests/test_pathcomp}/data.py (100%)
 delete mode 100644 test_pathcomp/ComputeSubServices.py
 delete mode 100644 test_pathcomp/ResourceGroups.py
 delete mode 100644 test_pathcomp/ServiceTypes.py
 delete mode 100644 test_pathcomp/old_ComputeSubServices.py

diff --git a/test_pathcomp/__init__.py b/src/pathcomp/frontend/tests/test_pathcomp/__init__.py
similarity index 100%
rename from test_pathcomp/__init__.py
rename to src/pathcomp/frontend/tests/test_pathcomp/__init__.py
diff --git a/test_pathcomp/__main__.py b/src/pathcomp/frontend/tests/test_pathcomp/__main__.py
similarity index 91%
rename from test_pathcomp/__main__.py
rename to src/pathcomp/frontend/tests/test_pathcomp/__main__.py
index 6af584fe9..ba1cc4a2c 100644
--- a/test_pathcomp/__main__.py
+++ b/src/pathcomp/frontend/tests/test_pathcomp/__main__.py
@@ -15,8 +15,8 @@
 
 import logging, sys
 from common.proto.context_pb2 import ServiceTypeEnum
+from pathcomp.frontend.service.algorithms.tools.ComputeSubServices import convert_explicit_path_hops_to_connections
 from .data import path_hops, device_dict
-from .ComputeSubServices import convert_explicit_path_hops_to_connections
 
 logging.basicConfig(level=logging.DEBUG)
 LOGGER = logging.getLogger(__name__)
diff --git a/test_pathcomp/data.py b/src/pathcomp/frontend/tests/test_pathcomp/data.py
similarity index 100%
rename from test_pathcomp/data.py
rename to src/pathcomp/frontend/tests/test_pathcomp/data.py
diff --git a/test_pathcomp/ComputeSubServices.py b/test_pathcomp/ComputeSubServices.py
deleted file mode 100644
index 40cb08576..000000000
--- a/test_pathcomp/ComputeSubServices.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Convert the path defined as explicit hops with ingress and egress endpoints per device into a set of connections and
-# compute the dependencies among them.
-#
-# Example:
-# o-- int DC1 eth1 -- 10/1 CS1 1/2 -- 1/2 R2 2/1 -- a7.. OLS 60.. -- 2/1 R3 1/1 -- 1/1 CS2 10/1 -- eth1 DC2 int --o
-#         APP              PKT            PKT            CTRL            PKT           PKT              APP
-#
-# path_hops = [
-#     {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
-#     {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
-#     {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
-#     {'device': 'TN-OLS', 'ingress_ep': 'a7a80b23a703', 'egress_ep': '60519106029e'},
-#     {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
-#     {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'},
-#     {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
-# ]
-#
-# connections=[
-#     (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE, [
-#             {'device': 'TN-OLS', 'ingress_ep': '833760219d0f', 'egress_ep': 'cf176771a4b9'}
-#         ], []),
-#     (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), ServiceTypeEnum.SERVICETYPE_L2NM, [
-#             {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
-#             {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
-#             {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
-#             {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'}
-#         ], [UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e')]),
-#     (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), ServiceTypeEnum.SERVICETYPE_L2NM, [
-#             {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
-#             {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
-#         ], [UUID('c2e57966-5d82-4705-a5fe-44cf6487219e')])
-# ]
-
-import logging, queue, uuid
-from typing import Dict, List, Optional, Tuple
-from common.DeviceTypes import DeviceTypeEnum
-from common.proto.context_pb2 import Device, ServiceTypeEnum
-from .ResourceGroups import IGNORED_DEVICE_TYPES, get_resource_classification
-from .ServiceTypes import get_service_type
-
-LOGGER = logging.getLogger(__name__)
-
-def convert_explicit_path_hops_to_connections(
-    path_hops : List[Dict], device_dict : Dict[str, Tuple[Dict, Device]],
-    main_service_uuid : str, main_service_type : ServiceTypeEnum
-) -> List[Tuple[str, int, List[str], List[str]]]:
-
-    LOGGER.debug('path_hops={:s}'.format(str(path_hops)))
-
-    connection_stack = queue.LifoQueue()
-    connections : List[Tuple[str, int, List[str], List[str]]] = list()
-    prv_device_uuid = None
-    prv_res_class : Tuple[Optional[int], Optional[DeviceTypeEnum], Optional[str]] = None, None, None
-
-    for path_hop in path_hops:
-        device_uuid = path_hop['device']
-        if prv_device_uuid == device_uuid: continue
-        device_tuple = device_dict.get(device_uuid)
-        if device_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_uuid)))
-        _,grpc_device = device_tuple
-
-        res_class = get_resource_classification(grpc_device, device_dict)
-        if res_class[1] in IGNORED_DEVICE_TYPES: continue
-
-        if prv_res_class[0] is None:
-            # path ingress
-            connection_stack.put((main_service_uuid, main_service_type, [path_hop], []))
-        elif prv_res_class[0] > res_class[0]:
-            # create underlying connection
-            connection_uuid = str(uuid.uuid4())
-            prv_service_type = connection_stack.queue[-1][1]
-            service_type = get_service_type(res_class[1], prv_service_type)
-            connection_stack.put((connection_uuid, service_type, [path_hop], []))
-        elif prv_res_class[0] == res_class[0]:
-            # same resource group kind
-            if prv_res_class[1] == res_class[1] and prv_res_class[2] == res_class[2]:
-                # same device type and device controller: connection continues
-                connection_stack.queue[-1][2].append(path_hop)
-            else:
-                # different device type or device controller: chain connections
-                connection = connection_stack.get()
-                connections.append(connection)
-                connection_stack.queue[-1][3].append(connection[0])
-
-                connection_uuid = str(uuid.uuid4())
-                prv_service_type = connection_stack.queue[-1][1]
-                service_type = get_service_type(res_class[1], prv_service_type)
-                connection_stack.put((connection_uuid, service_type, [path_hop], []))
-        elif prv_res_class[0] < res_class[0]:
-            # underlying connection ended
-            connection = connection_stack.get()
-            connections.append(connection)
-            connection_stack.queue[-1][3].append(connection[0])
-            connection_stack.queue[-1][2].append(path_hop)
-        else:
-            raise Exception('Uncontrolled condition')
-
-        prv_device_uuid = device_uuid
-        prv_res_class = res_class
-
-    # path egress
-    connections.append(connection_stack.get())
-    LOGGER.debug('connections={:s}'.format(str(connections)))
-    assert connection_stack.empty()
-    return connections
-
-def convert_explicit_path_hops_to_plain_connection(
-    path_hops : List[Dict], main_service_uuid : str, main_service_type : ServiceTypeEnum
-) -> List[Tuple[str, int, List[str], List[str]]]:
-
-    connection : Tuple[str, int, List[str], List[str]] = \
-        (main_service_uuid, main_service_type, [], [])
-
-    prv_device_uuid = None
-    for path_hop in path_hops:
-        device_uuid = path_hop['device']
-        if prv_device_uuid == device_uuid: continue
-        connection[2].append(path_hop)
-        prv_device_uuid = device_uuid
-
-    return [connection]
diff --git a/test_pathcomp/ResourceGroups.py b/test_pathcomp/ResourceGroups.py
deleted file mode 100644
index 17991ee33..000000000
--- a/test_pathcomp/ResourceGroups.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import json
-from typing import Dict, Optional, Tuple
-from common.DeviceTypes import DeviceTypeEnum
-from common.proto.context_pb2 import Device
-from common.tools.grpc.Tools import grpc_message_to_json_string
-
-DEVICE_TYPE_TO_DEEPNESS = {
-    DeviceTypeEnum.EMULATED_DATACENTER.value             : 90,
-    DeviceTypeEnum.DATACENTER.value                      : 90,
-    DeviceTypeEnum.NETWORK.value                         : 90,
-
-    DeviceTypeEnum.TERAFLOWSDN_CONTROLLER.value          : 80,
-    DeviceTypeEnum.EMULATED_PACKET_ROUTER.value          : 70,
-    DeviceTypeEnum.PACKET_ROUTER.value                   : 70,
-
-    DeviceTypeEnum.EMULATED_PACKET_SWITCH.value          : 60,
-    DeviceTypeEnum.PACKET_SWITCH.value                   : 60,
-    DeviceTypeEnum.EMULATED_P4_SWITCH.value              : 60,
-    DeviceTypeEnum.P4_SWITCH.value                       : 60,
-
-    DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM.value : 40,
-    DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM.value          : 40,
-
-    DeviceTypeEnum.EMULATED_XR_CONSTELLATION.value       : 40,
-    DeviceTypeEnum.XR_CONSTELLATION.value                : 40,
-
-    DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value       : 30,
-    DeviceTypeEnum.OPEN_LINE_SYSTEM.value                : 30,
-
-    DeviceTypeEnum.EMULATED_PACKET_RADIO_ROUTER.value    : 10,
-    DeviceTypeEnum.PACKET_RADIO_ROUTER.value             : 10,
-    DeviceTypeEnum.EMULATED_OPTICAL_TRANSPONDER.value    : 10,
-    DeviceTypeEnum.OPTICAL_TRANSPONDER.value             : 10,
-    DeviceTypeEnum.EMULATED_OPTICAL_ROADM.value          : 10,
-    DeviceTypeEnum.OPTICAL_ROADM.value                   : 10,
-
-    DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER.value       :  0,
-}
-
-IGNORED_DEVICE_TYPES = {DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER}
-
-def get_device_controller_uuid(
-    device : Device
-) -> Optional[str]:
-    for config_rule in device.device_config.config_rules:
-        if config_rule.WhichOneof('config_rule') != 'custom': continue
-        if config_rule.custom.resource_key != '_controller': continue
-        device_controller_id = json.loads(config_rule.custom.resource_value)
-        return device_controller_id['uuid']
-    return None
-
-def _map_device_type(device : Device) -> DeviceTypeEnum:
-    device_type = DeviceTypeEnum._value2member_map_.get(device.device_type) # pylint: disable=no-member
-    if device_type is None:
-        MSG = 'Unsupported DeviceType({:s}) for Device({:s})'
-        raise Exception(MSG.format(str(device.device_type), grpc_message_to_json_string(device)))
-    return device_type
-
-def _map_resource_to_deepness(device_type : DeviceTypeEnum) -> int:
-    deepness = DEVICE_TYPE_TO_DEEPNESS.get(device_type.value)
-    if deepness is None: raise Exception('Unsupported DeviceType({:s})'.format(str(device_type.value)))
-    return deepness
-
-def get_device_type(
-    device : Device, device_dict : Dict[str, Tuple[Dict, Device]], device_controller_uuid : Optional[str]
-) -> DeviceTypeEnum:
-    if device_controller_uuid is None: return _map_device_type(device)
-    device_controller_tuple = device_dict.get(device_controller_uuid)
-    if device_controller_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_controller_uuid)))
-    _,device = device_controller_tuple
-    return _map_device_type(device)
-
-def get_resource_classification(
-    device : Device, device_dict : Dict[str, Tuple[Dict, Device]]
-) -> Tuple[int, DeviceTypeEnum, Optional[str]]:
-    device_controller_uuid = get_device_controller_uuid(device)
-    device_type = get_device_type(device, device_dict, device_controller_uuid)
-    resource_deepness = _map_resource_to_deepness(device_type)
-    return resource_deepness, device_type, device_controller_uuid
diff --git a/test_pathcomp/ServiceTypes.py b/test_pathcomp/ServiceTypes.py
deleted file mode 100644
index 463b8039b..000000000
--- a/test_pathcomp/ServiceTypes.py
+++ /dev/null
@@ -1,53 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT 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 common.DeviceTypes import DeviceTypeEnum
-from common.proto.context_pb2 import ServiceTypeEnum
-
-PACKET_DEVICE_TYPES = {
-    DeviceTypeEnum.TERAFLOWSDN_CONTROLLER,
-    DeviceTypeEnum.PACKET_ROUTER, DeviceTypeEnum.EMULATED_PACKET_ROUTER,
-    DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH,
-}
-
-L2_DEVICE_TYPES = {
-    DeviceTypeEnum.PACKET_SWITCH, DeviceTypeEnum.EMULATED_PACKET_SWITCH,
-    DeviceTypeEnum.MICROWAVE_RADIO_SYSTEM, DeviceTypeEnum.EMULATED_MICROWAVE_RADIO_SYSTEM,
-    DeviceTypeEnum.PACKET_RADIO_ROUTER, DeviceTypeEnum.EMULATED_PACKET_RADIO_ROUTER,
-    DeviceTypeEnum.P4_SWITCH, DeviceTypeEnum.EMULATED_P4_SWITCH,
-}
-
-OPTICAL_DEVICE_TYPES = {
-    DeviceTypeEnum.OPEN_LINE_SYSTEM, DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM,
-    DeviceTypeEnum.XR_CONSTELLATION, DeviceTypeEnum.EMULATED_XR_CONSTELLATION,
-    DeviceTypeEnum.OPTICAL_ROADM, DeviceTypeEnum.EMULATED_OPTICAL_ROADM,
-    DeviceTypeEnum.OPTICAL_TRANSPONDER, DeviceTypeEnum.EMULATED_OPTICAL_TRANSPONDER,
-}
-
-SERVICE_TYPE_L2NM = {ServiceTypeEnum.SERVICETYPE_L2NM}
-SERVICE_TYPE_L3NM = {ServiceTypeEnum.SERVICETYPE_L3NM}
-SERVICE_TYPE_LXNM = {ServiceTypeEnum.SERVICETYPE_L3NM, ServiceTypeEnum.SERVICETYPE_L2NM}
-SERVICE_TYPE_TAPI = {ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE}
-
-def get_service_type(device_type : DeviceTypeEnum, prv_service_type : ServiceTypeEnum) -> ServiceTypeEnum:
-    if device_type in PACKET_DEVICE_TYPES and prv_service_type in SERVICE_TYPE_LXNM: return prv_service_type
-    if device_type in L2_DEVICE_TYPES: return ServiceTypeEnum.SERVICETYPE_L2NM
-    if device_type in OPTICAL_DEVICE_TYPES: return ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE
-
-    str_fields = ', '.join([
-        'device_type={:s}'.format(str(device_type)),
-        'prv_service_type={:s}'.format(str(prv_service_type)),
-    ])
-    raise Exception('Undefined Service Type for ({:s})'.format(str_fields))
diff --git a/test_pathcomp/old_ComputeSubServices.py b/test_pathcomp/old_ComputeSubServices.py
deleted file mode 100644
index c1d3115d4..000000000
--- a/test_pathcomp/old_ComputeSubServices.py
+++ /dev/null
@@ -1,119 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Convert the path defined as explicit hops with ingress and egress endpoints per device into a set of connections and
-# compute the dependencies among them.
-#
-# Example:
-# o-- int DC1 eth1 -- 10/1 CS1 1/2 -- 1/2 R2 2/1 -- a7.. OLS 60.. -- 2/1 R3 1/1 -- 1/1 CS2 10/1 -- eth1 DC2 int --o
-#         APP              PKT            PKT            CTRL            PKT           PKT              APP
-#
-# path_hops = [
-#     {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
-#     {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
-#     {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
-#     {'device': 'TN-OLS', 'ingress_ep': 'a7a80b23a703', 'egress_ep': '60519106029e'},
-#     {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
-#     {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'},
-#     {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
-# ]
-#
-# connections=[
-#     (UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e'), ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE, [
-#             {'device': 'TN-OLS', 'ingress_ep': '833760219d0f', 'egress_ep': 'cf176771a4b9'}
-#         ], []),
-#     (UUID('c2e57966-5d82-4705-a5fe-44cf6487219e'), ServiceTypeEnum.SERVICETYPE_L2NM, [
-#             {'device': 'CS1-GW1', 'ingress_ep': '10/1', 'egress_ep': '1/2'},
-#             {'device': 'TN-R2', 'ingress_ep': '1/2', 'egress_ep': '2/1'},
-#             {'device': 'TN-R3', 'ingress_ep': '2/1', 'egress_ep': '1/1'},
-#             {'device': 'CS2-GW1', 'ingress_ep': '1/1', 'egress_ep': '10/1'}
-#         ], [UUID('7548edf7-ee7c-4adf-ac0f-c7a0c0dfba8e')]),
-#     (UUID('1e205c82-f6ea-4977-9e97-dc27ef1f4802'), ServiceTypeEnum.SERVICETYPE_L2NM, [
-#             {'device': 'DC1-GW', 'ingress_ep': 'int', 'egress_ep': 'eth1'},
-#             {'device': 'DC2-GW', 'ingress_ep': 'eth1', 'egress_ep': 'int'}
-#         ], [UUID('c2e57966-5d82-4705-a5fe-44cf6487219e')])
-# ]
-
-import enum, json, logging, queue, uuid
-from typing import Dict, List, Optional, Tuple
-from common.DeviceTypes import DeviceTypeEnum
-from common.proto.context_pb2 import Device, ServiceTypeEnum
-from test_pathcomp.ResourceGroups import ResourceGroupKindEnum
-
-
-
-from .ConstantsMappings import DEVICE_TYPE_TO_LAYER, DeviceLayerEnum
-
-def convert_explicit_path_hops_to_connections(
-    path_hops : List[Dict], device_dict : Dict[str, Tuple[Dict, Device]],
-    main_service_uuid : str, main_service_type : ServiceTypeEnum
-) -> List[Tuple[str, int, List[str], List[str]]]:
-
-    connection_stack = queue.LifoQueue()
-    connections : List[Tuple[str, int, List[str], List[str]]] = list()
-    prv_device_uuid = None
-    prv_resource_group : Optional[Tuple[ResourceGroupKindEnum, DeviceTypeEnum, str]] = None
-
-    for path_hop in path_hops:
-        device_uuid = path_hop['device']
-        if prv_device_uuid == device_uuid: continue
-        device_tuple = device_dict.get(device_uuid)
-        if device_tuple is None: raise Exception('Device({:s}) not found'.format(str(device_uuid)))
-        json_device,_ = device_tuple
-        device_type = json_device['device_type']
-        resource_group = DEVICE_TYPE_TO_LAYER.get(device_type)
-        if resource_group is None: raise Exception('Undefined Layer for DeviceType({:s})'.format(str(device_type)))
-
-        if prv_resource_group is None:
-            # path ingress
-            connection_stack.put((main_service_uuid, main_service_type, [path_hop], []))
-        elif prv_resource_group > resource_group:
-            # underlying connection begins
-            connection_uuid = str(uuid.uuid4())
-            connection_stack.put((connection_uuid, resource_group, [path_hop], []))
-        elif prv_resource_group == resource_group:
-            # same connection continues
-            connection_stack.queue[-1][2].append(path_hop)
-        elif prv_resource_group < resource_group:
-            # underlying connection ended
-            connection = connection_stack.get()
-            connections.append(connection)
-            connection_stack.queue[-1][3].append(connection[0])
-            connection_stack.queue[-1][2].append(path_hop)
-        else:
-            raise Exception('Uncontrolled condition')
-
-        prv_resource_group = resource_group
-        prv_device_uuid = device_uuid
-
-    # path egress
-    connections.append(connection_stack.get())
-    assert connection_stack.empty()
-    return connections
-
-def convert_explicit_path_hops_to_plain_connection(
-    path_hops : List[Dict], main_service_uuid : str, main_service_type : ServiceTypeEnum
-) -> List[Tuple[str, int, List[str], List[str]]]:
-
-    connection : Tuple[str, int, List[str], List[str]] = \
-        (main_service_uuid, main_service_type, [], [])
-
-    prv_device_uuid = None
-    for path_hop in path_hops:
-        device_uuid = path_hop['device']
-        if prv_device_uuid == device_uuid: continue
-        connection[2].append(path_hop)
-        prv_device_uuid = device_uuid
-
-    return [connection]
-- 
GitLab


From b9d1b959f2506a130515093df7eb694d518825ef Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sat, 25 Mar 2023 09:47:03 +0000
Subject: [PATCH 213/229] Misc Scripts:

- Remove unneeded scripts
---
 map_names.sh | 59 ----------------------------------------------------
 1 file changed, 59 deletions(-)
 delete mode 100755 map_names.sh

diff --git a/map_names.sh b/map_names.sh
deleted file mode 100755
index e3bcc5640..000000000
--- a/map_names.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/bin/bash
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-sed -i 's#0dff8c06-873b-5799-ac54-c0452252bae1#R3#g' service.log
-sed -i 's#1102e0b5-824b-57eb-86a1-d247e2deaf68#PE4#g' service.log
-sed -i 's#29d766ca-d222-5257-bab3-6a060719270a#PE2#g' service.log
-sed -i 's#68741528-2e94-5274-ab3c-fddcd8dc05ef#R1#g' service.log
-sed -i 's#69a3a3f0-5237-5f9e-bc96-d450d0c6c02a#PE3#g' service.log
-sed -i 's#6ab8fa38-ec20-5c32-8d9b-4fd86fce2555#OLS#g' service.log
-sed -i 's#7faa13eb-903d-58f5-936b-1a1174fe98fd#PE1#g' service.log
-sed -i 's#800d5bd4-a7a3-5a66-82ab-d399767ca3d8#DC2#g' service.log
-sed -i 's#93c69975-3870-5892-955b-da0ff36eb884#MW1-2#g' service.log
-sed -i 's#f185c8cf-37e5-51cc-9f71-076b775a574d#MW3-4#g' service.log
-sed -i 's#a23cdc36-074d-5423-8abd-4a167a6e6fbc#TFS#g' service.log
-sed -i 's#c944aaeb-bbdf-5f2d-b31c-8cc8903045b6#R2#g' service.log
-sed -i 's#cda90d2f-e7b0-5837-8f2e-2fb29dd9b367#DC1#g' service.log
-sed -i 's#79f4184c-d375-5e2c-a3df-1ae64537c95c#1/1#g' service.log
-sed -i 's#93c853c2-429c-52e8-9ba9-454fcedb9090#1/2#g' service.log
-sed -i 's#1fe2ee1a-fe92-57c9-afd9-260e6f0ecc54#mgmt#g' service.log
-sed -i 's#cd378805-d73e-5681-8514-1d33e656c0e9#1/1#g' service.log
-sed -i 's#e502e939-3ab8-5fee-8277-7fd1c1c0fa93#1/2#g' service.log
-sed -i 's#780f6929-a863-5e6a-a046-3dac2e24bf58#1/1#g' service.log
-sed -i 's#f1082088-a304-587b-a230-b8ce10e5a148#mgmt#g' service.log
-sed -i 's#ffdfb0ce-1684-5d39-bad3-9ff1eb4ffbf8#1/2#g' service.log
-sed -i 's#268b735d-c861-5319-88a4-2ea498f96a04#1/1#g' service.log
-sed -i 's#62c0cba1-9ee8-5db5-82da-ce96d7e0f39f#1/3#g' service.log
-sed -i 's#7d1bf45c-5ab2-525e-87a4-c0ddcd5c18e4#1/2#g' service.log
-sed -i 's#2b11934b-dfd7-5267-87b9-7306a24e0182#1/1#g' service.log
-sed -i 's#ca92338e-2038-5d74-8ef1-2b20a234a8b9#1/2#g' service.log
-sed -i 's#f8955e74-4e93-5d43-a968-9626ee5c9b53#mgmt#g' service.log
-sed -i 's#2b75d88d-095f-5752-a10a-1ff69df8008d#1/2#g' service.log
-sed -i 's#bf0d75db-acf8-53cb-b6db-32d9dc0878c4#mgmt#g' service.log
-sed -i 's#eeade85a-03df-55d2-bfc2-2af7267bbcf3#1/1#g' service.log
-sed -i 's#06bb0b92-8783-5599-aa20-15bfbe241348#eth1#g' service.log
-sed -i 's#6a6859c3-4a13-513c-a7dd-490c8b2931b1#eth2#g' service.log
-sed -i 's#97f57787-cfec-5315-9718-7e850905f11a#int#g' service.log
-sed -i 's#01251c49-6d35-5c70-8480-576991321d15#172.18.0.1:1#g' service.log
-sed -i 's#023ac3a2-35bb-53cf-9173-a0b4f979af58#172.18.0.2:1#g' service.log
-sed -i 's#1b4e8958-f1c2-5ef7-9297-f4e9756275f9#172.18.0.3:1#g' service.log
-sed -i 's#f6cdc04b-1a12-537f-b0cc-daefdb89b61c#172.18.0.4:1#g' service.log
-sed -i 's#85bb83b0-8d96-5e76-9959-97c35036d4f9#mgmt#g' service.log
-sed -i 's#313fb1ed-5dee-5e49-884a-cbb3b1e00073#1/2#g' service.log
-sed -i 's#79699f56-df25-5188-a389-04606c24fbfc#1/1#g' service.log
-sed -i 's#37ab67ef-0064-54e3-ae9b-d40100953834#int#g' service.log
-sed -i 's#55e88b6b-ccf7-538f-a062-a41219292ea1#eth1#g' service.log
-sed -i 's#68b5972b-3630-53a8-ba9b-cc54dd31f8b8#eth2#g' service.log
-- 
GitLab


From 079238772061cfcaeb357001b9713a4095eb54cb Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sun, 26 Mar 2023 06:20:46 +0000
Subject: [PATCH 214/229] Policy component:

- Fixed missing IETF_L2VPN entry in DeviceDriverEnum
---
 .../eu/teraflow/policy/context/model/DeviceDriverEnum.java     | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceDriverEnum.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceDriverEnum.java
index daee299dd..ad763e35d 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceDriverEnum.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceDriverEnum.java
@@ -23,5 +23,6 @@ public enum DeviceDriverEnum {
     P4,
     IETF_NETWORK_TOPOLOGY,
     ONF_TR_352,
-    XR
+    XR,
+    IETF_L2VPN
 }
-- 
GitLab


From 89374bf9680ef181f08e746887a02e34c86ed9f7 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sun, 26 Mar 2023 06:53:57 +0000
Subject: [PATCH 215/229] PathComp component - Frontend:

- Fixed unitary tests
---
 src/pathcomp/frontend/tests/Objects_A_B_C.py  | 70 ++++++++++-----
 .../frontend/tests/Objects_DC_CSGW_TN.py      | 88 +++++++++++-------
 .../frontend/tests/Objects_DC_CSGW_TN_OLS.py  | 89 ++++++++++++-------
 src/pathcomp/frontend/tests/test_unitary.py   | 63 +++++++------
 4 files changed, 194 insertions(+), 116 deletions(-)

diff --git a/src/pathcomp/frontend/tests/Objects_A_B_C.py b/src/pathcomp/frontend/tests/Objects_A_B_C.py
index f26d74ce4..5290123b6 100644
--- a/src/pathcomp/frontend/tests/Objects_A_B_C.py
+++ b/src/pathcomp/frontend/tests/Objects_A_B_C.py
@@ -80,21 +80,36 @@ DEVICE_C3_ID, DEVICE_C3_ENDPOINTS, DEVICE_C3 = compose_device('C3', ['1', '2', '
 LINK_A2_C3_ID, LINK_A2_C3 = compose_link(DEVICE_A2_ENDPOINTS[2], DEVICE_C3_ENDPOINTS[2])
 LINK_C1_B2_ID, LINK_C1_B2 = compose_link(DEVICE_C1_ENDPOINTS[2], DEVICE_B2_ENDPOINTS[2])
 
+LINK_C3_A2_ID, LINK_C3_A2 = compose_link(DEVICE_C3_ENDPOINTS[2], DEVICE_A2_ENDPOINTS[2])
+LINK_B2_C1_ID, LINK_B2_C1 = compose_link(DEVICE_B2_ENDPOINTS[2], DEVICE_C1_ENDPOINTS[2])
+
 # ----- IntraDomain A Links --------------------------------------------------------------------------------------------
 LINK_A1_A2_ID, LINK_A1_A2 = compose_link(DEVICE_A1_ENDPOINTS[0], DEVICE_A2_ENDPOINTS[0])
 LINK_A1_A3_ID, LINK_A1_A3 = compose_link(DEVICE_A1_ENDPOINTS[1], DEVICE_A3_ENDPOINTS[0])
 LINK_A2_A3_ID, LINK_A2_A3 = compose_link(DEVICE_A2_ENDPOINTS[1], DEVICE_A3_ENDPOINTS[1])
 
+LINK_A2_A1_ID, LINK_A2_A1 = compose_link(DEVICE_A2_ENDPOINTS[0], DEVICE_A1_ENDPOINTS[0])
+LINK_A3_A1_ID, LINK_A3_A1 = compose_link(DEVICE_A3_ENDPOINTS[0], DEVICE_A1_ENDPOINTS[1])
+LINK_A3_A2_ID, LINK_A3_A2 = compose_link(DEVICE_A3_ENDPOINTS[1], DEVICE_A2_ENDPOINTS[1])
+
 # ----- IntraDomain B Links --------------------------------------------------------------------------------------------
 LINK_B1_B2_ID, LINK_B1_B2 = compose_link(DEVICE_B1_ENDPOINTS[0], DEVICE_B2_ENDPOINTS[0])
 LINK_B1_B3_ID, LINK_B1_B3 = compose_link(DEVICE_B1_ENDPOINTS[1], DEVICE_B3_ENDPOINTS[0])
 LINK_B2_B3_ID, LINK_B2_B3 = compose_link(DEVICE_B2_ENDPOINTS[1], DEVICE_B3_ENDPOINTS[1])
 
+LINK_B2_B1_ID, LINK_B2_B1 = compose_link(DEVICE_B2_ENDPOINTS[0], DEVICE_B1_ENDPOINTS[0])
+LINK_B3_B1_ID, LINK_B3_B1 = compose_link(DEVICE_B3_ENDPOINTS[0], DEVICE_B1_ENDPOINTS[1])
+LINK_B3_B2_ID, LINK_B3_B2 = compose_link(DEVICE_B3_ENDPOINTS[1], DEVICE_B2_ENDPOINTS[1])
+
 # ----- IntraDomain C Links --------------------------------------------------------------------------------------------
 LINK_C1_C2_ID, LINK_C1_C2 = compose_link(DEVICE_C1_ENDPOINTS[0], DEVICE_C2_ENDPOINTS[0])
 LINK_C1_C3_ID, LINK_C1_C3 = compose_link(DEVICE_C1_ENDPOINTS[1], DEVICE_C3_ENDPOINTS[0])
 LINK_C2_C3_ID, LINK_C2_C3 = compose_link(DEVICE_C2_ENDPOINTS[1], DEVICE_C3_ENDPOINTS[1])
 
+LINK_C2_C1_ID, LINK_C2_C1 = compose_link(DEVICE_C2_ENDPOINTS[0], DEVICE_C1_ENDPOINTS[0])
+LINK_C3_C1_ID, LINK_C3_C1 = compose_link(DEVICE_C3_ENDPOINTS[0], DEVICE_C1_ENDPOINTS[1])
+LINK_C3_C2_ID, LINK_C3_C2 = compose_link(DEVICE_C3_ENDPOINTS[1], DEVICE_C2_ENDPOINTS[1])
+
 # ----- Service --------------------------------------------------------------------------------------------------------
 SERVICE_A1_B1 = compose_service(DEVICE_A1_ENDPOINTS[2], DEVICE_B1_ENDPOINTS[2], constraints=[
     json_constraint_sla_capacity(10.0),
@@ -108,31 +123,38 @@ DEVICES    = [  DEVICE_A1, DEVICE_A2, DEVICE_A3,
                 DEVICE_B1, DEVICE_B2, DEVICE_B3,
                 DEVICE_C1, DEVICE_C2, DEVICE_C3,    ]
 LINKS      = [  LINK_A2_C3, LINK_C1_B2,
+                LINK_C3_A2, LINK_B2_C1,
+
                 LINK_A1_A2, LINK_A1_A3, LINK_A2_A3,
+                LINK_A2_A1, LINK_A3_A1, LINK_A3_A2,
+
                 LINK_B1_B2, LINK_B1_B3, LINK_B2_B3,
-                LINK_C1_C2, LINK_C1_C3, LINK_C2_C3, ]
+                LINK_B2_B1, LINK_B3_B1, LINK_B3_B2,
+
+                LINK_C1_C2, LINK_C1_C3, LINK_C2_C3,
+                LINK_C2_C1, LINK_C3_C1, LINK_C3_C2, ]
 SERVICES   = [  SERVICE_A1_B1]
 
-OBJECTS_PER_TOPOLOGY = [
-    (TOPOLOGY_ADMIN_ID,
-        [   DEVICE_A1_ID, DEVICE_A2_ID, DEVICE_A3_ID,
-            DEVICE_B1_ID, DEVICE_B2_ID, DEVICE_B3_ID,
-            DEVICE_C1_ID, DEVICE_C2_ID, DEVICE_C3_ID,       ],
-        [   LINK_A2_C3_ID, LINK_C1_B2_ID,
-            LINK_A1_A2_ID, LINK_A1_A3_ID, LINK_A2_A3_ID,
-            LINK_B1_B2_ID, LINK_B1_B3_ID, LINK_B2_B3_ID,
-            LINK_C1_C2_ID, LINK_C1_C3_ID, LINK_C2_C3_ID,    ],
-    ),
-    (TOPOLOGY_A_ID,
-        [   DEVICE_A1_ID, DEVICE_A2_ID, DEVICE_A3_ID,       ],
-        [   LINK_A1_A2_ID, LINK_A1_A3_ID, LINK_A2_A3_ID,    ],
-    ),
-    (TOPOLOGY_B_ID,
-        [   DEVICE_B1_ID, DEVICE_B2_ID, DEVICE_B3_ID,       ],
-        [   LINK_B1_B2_ID, LINK_B1_B3_ID, LINK_B2_B3_ID,    ],
-    ),
-    (TOPOLOGY_C_ID,
-        [   DEVICE_C1_ID, DEVICE_C2_ID, DEVICE_C3_ID,       ],
-        [   LINK_C1_C2_ID, LINK_C1_C3_ID, LINK_C2_C3_ID,    ],
-    ),
-]
+#OBJECTS_PER_TOPOLOGY = [
+#    (TOPOLOGY_ADMIN_ID,
+#        [   DEVICE_A1_ID, DEVICE_A2_ID, DEVICE_A3_ID,
+#            DEVICE_B1_ID, DEVICE_B2_ID, DEVICE_B3_ID,
+#            DEVICE_C1_ID, DEVICE_C2_ID, DEVICE_C3_ID,       ],
+#        [   LINK_A2_C3_ID, LINK_C1_B2_ID,
+#            LINK_A1_A2_ID, LINK_A1_A3_ID, LINK_A2_A3_ID,
+#            LINK_B1_B2_ID, LINK_B1_B3_ID, LINK_B2_B3_ID,
+#            LINK_C1_C2_ID, LINK_C1_C3_ID, LINK_C2_C3_ID,    ],
+#    ),
+#    (TOPOLOGY_A_ID,
+#        [   DEVICE_A1_ID, DEVICE_A2_ID, DEVICE_A3_ID,       ],
+#        [   LINK_A1_A2_ID, LINK_A1_A3_ID, LINK_A2_A3_ID,    ],
+#    ),
+#    (TOPOLOGY_B_ID,
+#        [   DEVICE_B1_ID, DEVICE_B2_ID, DEVICE_B3_ID,       ],
+#        [   LINK_B1_B2_ID, LINK_B1_B3_ID, LINK_B2_B3_ID,    ],
+#    ),
+#    (TOPOLOGY_C_ID,
+#        [   DEVICE_C1_ID, DEVICE_C2_ID, DEVICE_C3_ID,       ],
+#        [   LINK_C1_C2_ID, LINK_C1_C3_ID, LINK_C2_C3_ID,    ],
+#    ),
+#]
diff --git a/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py
index 9ee784e1f..053dfd4c4 100644
--- a/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py
+++ b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN.py
@@ -118,6 +118,11 @@ LINK_DC1GW_CS1GW2_ID, LINK_DC1GW_CS1GW2 = compose_link(DEV_DC1GW_EPS[1], DEV_CS1
 LINK_DC2GW_CS2GW1_ID, LINK_DC2GW_CS2GW1 = compose_link(DEV_DC2GW_EPS[0], DEV_CS2GW1_EPS[0])
 LINK_DC2GW_CS2GW2_ID, LINK_DC2GW_CS2GW2 = compose_link(DEV_DC2GW_EPS[1], DEV_CS2GW2_EPS[0])
 
+LINK_CS1GW1_DC1GW_ID, LINK_CS1GW1_DC1GW = compose_link(DEV_CS1GW1_EPS[0], DEV_DC1GW_EPS[0])
+LINK_CS1GW2_DC1GW_ID, LINK_CS1GW2_DC1GW = compose_link(DEV_CS1GW2_EPS[0], DEV_DC1GW_EPS[1])
+LINK_CS2GW1_DC2GW_ID, LINK_CS2GW1_DC2GW = compose_link(DEV_CS2GW1_EPS[0], DEV_DC2GW_EPS[0])
+LINK_CS2GW2_DC2GW_ID, LINK_CS2GW2_DC2GW = compose_link(DEV_CS2GW2_EPS[0], DEV_DC2GW_EPS[1])
+
 # InterDomain CSGW-TN
 LINK_CS1GW1_TNR1_ID, LINK_CS1GW1_TNR1 = compose_link(DEV_CS1GW1_EPS[1], DEV_TNR1_EPS[0])
 LINK_CS1GW2_TNR2_ID, LINK_CS1GW2_TNR2 = compose_link(DEV_CS1GW2_EPS[1], DEV_TNR2_EPS[0])
@@ -128,6 +133,15 @@ LINK_CS2GW2_TNR4_ID, LINK_CS2GW2_TNR4 = compose_link(DEV_CS2GW2_EPS[1], DEV_TNR4
 LINK_CS2GW1_TNR4_ID, LINK_CS2GW1_TNR4 = compose_link(DEV_CS2GW1_EPS[2], DEV_TNR4_EPS[1])
 LINK_CS2GW2_TNR3_ID, LINK_CS2GW2_TNR3 = compose_link(DEV_CS2GW2_EPS[2], DEV_TNR3_EPS[1])
 
+LINK_TNR1_CS1GW1_ID, LINK_TNR1_CS1GW1 = compose_link(DEV_TNR1_EPS[0], DEV_CS1GW1_EPS[1])
+LINK_TNR2_CS1GW2_ID, LINK_TNR2_CS1GW2 = compose_link(DEV_TNR2_EPS[0], DEV_CS1GW2_EPS[1])
+LINK_TNR2_CS1GW1_ID, LINK_TNR2_CS1GW1 = compose_link(DEV_TNR2_EPS[1], DEV_CS1GW1_EPS[2])
+LINK_TNR1_CS1GW2_ID, LINK_TNR1_CS1GW2 = compose_link(DEV_TNR1_EPS[1], DEV_CS1GW2_EPS[2])
+LINK_TNR3_CS2GW1_ID, LINK_TNR3_CS2GW1 = compose_link(DEV_TNR3_EPS[0], DEV_CS2GW1_EPS[1])
+LINK_TNR4_CS2GW2_ID, LINK_TNR4_CS2GW2 = compose_link(DEV_TNR4_EPS[0], DEV_CS2GW2_EPS[1])
+LINK_TNR4_CS2GW1_ID, LINK_TNR4_CS2GW1 = compose_link(DEV_TNR4_EPS[1], DEV_CS2GW1_EPS[2])
+LINK_TNR3_CS2GW2_ID, LINK_TNR3_CS2GW2 = compose_link(DEV_TNR3_EPS[1], DEV_CS2GW2_EPS[2])
+
 # IntraDomain TN
 LINK_TNR1_TNR2_ID, LINK_TNR1_TNR2 = compose_link(DEV_TNR1_EPS[2], DEV_TNR2_EPS[3])
 LINK_TNR2_TNR3_ID, LINK_TNR2_TNR3 = compose_link(DEV_TNR2_EPS[2], DEV_TNR3_EPS[3])
@@ -136,6 +150,13 @@ LINK_TNR4_TNR1_ID, LINK_TNR4_TNR1 = compose_link(DEV_TNR4_EPS[2], DEV_TNR1_EPS[3
 LINK_TNR1_TNR3_ID, LINK_TNR1_TNR3 = compose_link(DEV_TNR1_EPS[4], DEV_TNR3_EPS[4])
 LINK_TNR2_TNR4_ID, LINK_TNR2_TNR4 = compose_link(DEV_TNR2_EPS[4], DEV_TNR4_EPS[4])
 
+LINK_TNR2_TNR1_ID, LINK_TNR2_TNR1 = compose_link(DEV_TNR2_EPS[3], DEV_TNR1_EPS[2])
+LINK_TNR3_TNR2_ID, LINK_TNR3_TNR2 = compose_link(DEV_TNR3_EPS[3], DEV_TNR2_EPS[2])
+LINK_TNR4_TNR3_ID, LINK_TNR4_TNR3 = compose_link(DEV_TNR4_EPS[3], DEV_TNR3_EPS[2])
+LINK_TNR1_TNR4_ID, LINK_TNR1_TNR4 = compose_link(DEV_TNR1_EPS[3], DEV_TNR4_EPS[2])
+LINK_TNR3_TNR1_ID, LINK_TNR3_TNR1 = compose_link(DEV_TNR3_EPS[4], DEV_TNR1_EPS[4])
+LINK_TNR4_TNR2_ID, LINK_TNR4_TNR2 = compose_link(DEV_TNR4_EPS[4], DEV_TNR2_EPS[4])
+
 
 # ----- Service --------------------------------------------------------------------------------------------------------
 SERVICE_DC1GW_DC2GW = compose_service(DEV_DC1GW_EPS[2], DEV_DC2GW_EPS[2], constraints=[
@@ -151,41 +172,44 @@ DEVICES    = [  DEV_DC1GW, DEV_DC2GW,
                 DEV_TNR1, DEV_TNR2, DEV_TNR3, DEV_TNR4,
             ]
 LINKS      = [  LINK_DC1GW_CS1GW1, LINK_DC1GW_CS1GW2, LINK_DC2GW_CS2GW1, LINK_DC2GW_CS2GW2,
+                LINK_CS1GW1_DC1GW, LINK_CS1GW2_DC1GW, LINK_CS2GW1_DC2GW, LINK_CS2GW2_DC2GW,
+
                 LINK_CS1GW1_TNR1, LINK_CS1GW2_TNR2, LINK_CS1GW1_TNR2, LINK_CS1GW2_TNR1,
                 LINK_CS2GW1_TNR3, LINK_CS2GW2_TNR4, LINK_CS2GW1_TNR4, LINK_CS2GW2_TNR3,
                 LINK_TNR1_TNR2, LINK_TNR2_TNR3, LINK_TNR3_TNR4, LINK_TNR4_TNR1, LINK_TNR1_TNR3, LINK_TNR2_TNR4,
+                LINK_TNR2_TNR1, LINK_TNR3_TNR2, LINK_TNR4_TNR3, LINK_TNR1_TNR4, LINK_TNR3_TNR1, LINK_TNR4_TNR2,
             ]
 SERVICES   = [  SERVICE_DC1GW_DC2GW   ]
 
-OBJECTS_PER_TOPOLOGY = [
-    (TOPO_ADMIN_ID,
-        [   DEV_DC1GW_ID, DEV_DC2GW_ID,
-            DEV_CS1GW1_ID, DEV_CS1GW2_ID, DEV_CS2GW1_ID, DEV_CS2GW2_ID,
-            DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID,
-        ],
-        [   LINK_DC1GW_CS1GW1_ID, LINK_DC1GW_CS1GW2_ID, LINK_DC2GW_CS2GW1_ID, LINK_DC2GW_CS2GW2_ID,
-            LINK_CS1GW1_TNR1_ID, LINK_CS1GW2_TNR2_ID, LINK_CS1GW1_TNR2_ID, LINK_CS1GW2_TNR1_ID,
-            LINK_CS2GW1_TNR3_ID, LINK_CS2GW2_TNR4_ID, LINK_CS2GW1_TNR4_ID, LINK_CS2GW2_TNR3_ID,
-            LINK_TNR1_TNR2_ID, LINK_TNR2_TNR3_ID, LINK_TNR3_TNR4_ID, LINK_TNR4_TNR1_ID, LINK_TNR1_TNR3_ID,
-            LINK_TNR2_TNR4_ID,
-        ],
-    ),
-    (TOPO_DC1_ID,
-        [DEV_DC1GW_ID],
-        []),
-    (TOPO_DC2_ID,
-        [DEV_DC2GW_ID],
-        []),
-    (TOPO_CS1_ID,
-        [DEV_CS1GW1_ID, DEV_CS1GW2_ID],
-        []),
-    (TOPO_CS2_ID,
-        [DEV_CS2GW1_ID, DEV_CS2GW2_ID],
-        []),
-    (TOPO_TN_ID,
-        [   DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID,
-        ],
-        [   LINK_TNR1_TNR2_ID, LINK_TNR2_TNR3_ID, LINK_TNR3_TNR4_ID, LINK_TNR4_TNR1_ID, LINK_TNR1_TNR3_ID,
-            LINK_TNR2_TNR4_ID,
-        ]),
-]
+#OBJECTS_PER_TOPOLOGY = [
+#    (TOPO_ADMIN_ID,
+#        [   DEV_DC1GW_ID, DEV_DC2GW_ID,
+#            DEV_CS1GW1_ID, DEV_CS1GW2_ID, DEV_CS2GW1_ID, DEV_CS2GW2_ID,
+#            DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID,
+#        ],
+#        [   LINK_DC1GW_CS1GW1_ID, LINK_DC1GW_CS1GW2_ID, LINK_DC2GW_CS2GW1_ID, LINK_DC2GW_CS2GW2_ID,
+#            LINK_CS1GW1_TNR1_ID, LINK_CS1GW2_TNR2_ID, LINK_CS1GW1_TNR2_ID, LINK_CS1GW2_TNR1_ID,
+#            LINK_CS2GW1_TNR3_ID, LINK_CS2GW2_TNR4_ID, LINK_CS2GW1_TNR4_ID, LINK_CS2GW2_TNR3_ID,
+#            LINK_TNR1_TNR2_ID, LINK_TNR2_TNR3_ID, LINK_TNR3_TNR4_ID, LINK_TNR4_TNR1_ID, LINK_TNR1_TNR3_ID,
+#            LINK_TNR2_TNR4_ID,
+#        ],
+#    ),
+#    (TOPO_DC1_ID,
+#        [DEV_DC1GW_ID],
+#        []),
+#    (TOPO_DC2_ID,
+#        [DEV_DC2GW_ID],
+#        []),
+#    (TOPO_CS1_ID,
+#        [DEV_CS1GW1_ID, DEV_CS1GW2_ID],
+#        []),
+#    (TOPO_CS2_ID,
+#        [DEV_CS2GW1_ID, DEV_CS2GW2_ID],
+#        []),
+#    (TOPO_TN_ID,
+#        [   DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID,
+#        ],
+#        [   LINK_TNR1_TNR2_ID, LINK_TNR2_TNR3_ID, LINK_TNR3_TNR4_ID, LINK_TNR4_TNR1_ID, LINK_TNR1_TNR3_ID,
+#            LINK_TNR2_TNR4_ID,
+#        ]),
+#]
diff --git a/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py
index 71510d088..2c8428568 100644
--- a/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py
+++ b/src/pathcomp/frontend/tests/Objects_DC_CSGW_TN_OLS.py
@@ -130,6 +130,11 @@ LINK_DC1GW_CS1GW2_ID, LINK_DC1GW_CS1GW2 = compose_link(DEV_DC1GW_EPS[1], DEV_CS1
 LINK_DC2GW_CS2GW1_ID, LINK_DC2GW_CS2GW1 = compose_link(DEV_DC2GW_EPS[0], DEV_CS2GW1_EPS[0])
 LINK_DC2GW_CS2GW2_ID, LINK_DC2GW_CS2GW2 = compose_link(DEV_DC2GW_EPS[1], DEV_CS2GW2_EPS[0])
 
+LINK_CS1GW1_DC1GW_ID, LINK_CS1GW1_DC1GW = compose_link(DEV_CS1GW1_EPS[0], DEV_DC1GW_EPS[0])
+LINK_CS1GW2_DC1GW_ID, LINK_CS1GW2_DC1GW = compose_link(DEV_CS1GW2_EPS[0], DEV_DC1GW_EPS[1])
+LINK_CS2GW1_DC2GW_ID, LINK_CS2GW1_DC2GW = compose_link(DEV_CS2GW1_EPS[0], DEV_DC2GW_EPS[0])
+LINK_CS2GW2_DC2GW_ID, LINK_CS2GW2_DC2GW = compose_link(DEV_CS2GW2_EPS[0], DEV_DC2GW_EPS[1])
+
 # InterDomain CSGW-TN
 LINK_CS1GW1_TNR1_ID, LINK_CS1GW1_TNR1 = compose_link(DEV_CS1GW1_EPS[1], DEV_TNR1_EPS[0])
 LINK_CS1GW2_TNR2_ID, LINK_CS1GW2_TNR2 = compose_link(DEV_CS1GW2_EPS[1], DEV_TNR2_EPS[0])
@@ -140,12 +145,26 @@ LINK_CS2GW2_TNR4_ID, LINK_CS2GW2_TNR4 = compose_link(DEV_CS2GW2_EPS[1], DEV_TNR4
 LINK_CS2GW1_TNR4_ID, LINK_CS2GW1_TNR4 = compose_link(DEV_CS2GW1_EPS[2], DEV_TNR4_EPS[1])
 LINK_CS2GW2_TNR3_ID, LINK_CS2GW2_TNR3 = compose_link(DEV_CS2GW2_EPS[2], DEV_TNR3_EPS[1])
 
+LINK_TNR1_CS1GW1_ID, LINK_TNR1_CS1GW1 = compose_link(DEV_TNR1_EPS[0], DEV_CS1GW1_EPS[1])
+LINK_TNR2_CS1GW2_ID, LINK_TNR2_CS1GW2 = compose_link(DEV_TNR2_EPS[0], DEV_CS1GW2_EPS[1])
+LINK_TNR2_CS1GW1_ID, LINK_TNR2_CS1GW1 = compose_link(DEV_TNR2_EPS[1], DEV_CS1GW1_EPS[2])
+LINK_TNR1_CS1GW2_ID, LINK_TNR1_CS1GW2 = compose_link(DEV_TNR1_EPS[1], DEV_CS1GW2_EPS[2])
+LINK_TNR3_CS2GW1_ID, LINK_TNR3_CS2GW1 = compose_link(DEV_TNR3_EPS[0], DEV_CS2GW1_EPS[1])
+LINK_TNR4_CS2GW2_ID, LINK_TNR4_CS2GW2 = compose_link(DEV_TNR4_EPS[0], DEV_CS2GW2_EPS[1])
+LINK_TNR4_CS2GW1_ID, LINK_TNR4_CS2GW1 = compose_link(DEV_TNR4_EPS[1], DEV_CS2GW1_EPS[2])
+LINK_TNR3_CS2GW2_ID, LINK_TNR3_CS2GW2 = compose_link(DEV_TNR3_EPS[1], DEV_CS2GW2_EPS[2])
+
 # IntraDomain TN
 LINK_TNR1_TOLS_ID, LINK_TNR1_TOLS = compose_link(DEV_TNR1_EPS[2], DEV_TOLS_EPS[0])
 LINK_TNR2_TOLS_ID, LINK_TNR2_TOLS = compose_link(DEV_TNR2_EPS[2], DEV_TOLS_EPS[1])
 LINK_TNR3_TOLS_ID, LINK_TNR3_TOLS = compose_link(DEV_TNR3_EPS[2], DEV_TOLS_EPS[2])
 LINK_TNR4_TOLS_ID, LINK_TNR4_TOLS = compose_link(DEV_TNR4_EPS[2], DEV_TOLS_EPS[3])
 
+LINK_TOLS_TNR1_ID, LINK_TOLS_TNR1 = compose_link(DEV_TOLS_EPS[0], DEV_TNR1_EPS[2])
+LINK_TOLS_TNR2_ID, LINK_TOLS_TNR2 = compose_link(DEV_TOLS_EPS[1], DEV_TNR2_EPS[2])
+LINK_TOLS_TNR3_ID, LINK_TOLS_TNR3 = compose_link(DEV_TOLS_EPS[2], DEV_TNR3_EPS[2])
+LINK_TOLS_TNR4_ID, LINK_TOLS_TNR4 = compose_link(DEV_TOLS_EPS[3], DEV_TNR4_EPS[2])
+
 
 # ----- Service --------------------------------------------------------------------------------------------------------
 SERVICE_DC1GW_DC2GW = compose_service(DEV_DC1GW_EPS[2], DEV_DC2GW_EPS[2], constraints=[
@@ -162,41 +181,47 @@ DEVICES    = [  DEV_DC1GW, DEV_DC2GW,
                 DEV_TOLS,
             ]
 LINKS      = [  LINK_DC1GW_CS1GW1, LINK_DC1GW_CS1GW2, LINK_DC2GW_CS2GW1, LINK_DC2GW_CS2GW2,
+                LINK_CS1GW1_DC1GW, LINK_CS1GW2_DC1GW, LINK_CS2GW1_DC2GW, LINK_CS2GW2_DC2GW,
+
                 LINK_CS1GW1_TNR1, LINK_CS1GW2_TNR2, LINK_CS1GW1_TNR2, LINK_CS1GW2_TNR1,
                 LINK_CS2GW1_TNR3, LINK_CS2GW2_TNR4, LINK_CS2GW1_TNR4, LINK_CS2GW2_TNR3,
+                LINK_TNR1_CS1GW1, LINK_TNR2_CS1GW2, LINK_TNR2_CS1GW1, LINK_TNR1_CS1GW2,
+                LINK_TNR3_CS2GW1, LINK_TNR4_CS2GW2, LINK_TNR4_CS2GW1, LINK_TNR3_CS2GW2,
+
                 LINK_TNR1_TOLS, LINK_TNR2_TOLS, LINK_TNR3_TOLS, LINK_TNR4_TOLS,
+                LINK_TOLS_TNR1, LINK_TOLS_TNR2, LINK_TOLS_TNR3, LINK_TOLS_TNR4,
             ]
 SERVICES   = [  SERVICE_DC1GW_DC2GW   ]
 
-OBJECTS_PER_TOPOLOGY = [
-    (TOPO_ADMIN_ID,
-        [   DEV_DC1GW_ID, DEV_DC2GW_ID,
-            DEV_CS1GW1_ID, DEV_CS1GW2_ID, DEV_CS2GW1_ID, DEV_CS2GW2_ID,
-            DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID,
-            DEV_TOLS_ID,
-        ],
-        [   LINK_DC1GW_CS1GW1_ID, LINK_DC1GW_CS1GW2_ID, LINK_DC2GW_CS2GW1_ID, LINK_DC2GW_CS2GW2_ID,
-            LINK_CS1GW1_TNR1_ID, LINK_CS1GW2_TNR2_ID, LINK_CS1GW1_TNR2_ID, LINK_CS1GW2_TNR1_ID,
-            LINK_CS2GW1_TNR3_ID, LINK_CS2GW2_TNR4_ID, LINK_CS2GW1_TNR4_ID, LINK_CS2GW2_TNR3_ID,
-            LINK_TNR1_TOLS_ID, LINK_TNR2_TOLS_ID, LINK_TNR3_TOLS_ID, LINK_TNR4_TOLS_ID,
-        ],
-    ),
-    (TOPO_DC1_ID,
-        [DEV_DC1GW_ID],
-        []),
-    (TOPO_DC2_ID,
-        [DEV_DC2GW_ID],
-        []),
-    (TOPO_CS1_ID,
-        [DEV_CS1GW1_ID, DEV_CS1GW2_ID],
-        []),
-    (TOPO_CS2_ID,
-        [DEV_CS2GW1_ID, DEV_CS2GW2_ID],
-        []),
-    (TOPO_TN_ID,
-        [   DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID,
-            DEV_TOLS_ID,
-        ],
-        [   LINK_TNR1_TOLS_ID, LINK_TNR2_TOLS_ID, LINK_TNR3_TOLS_ID, LINK_TNR4_TOLS_ID,
-        ]),
-]
+#OBJECTS_PER_TOPOLOGY = [
+#    (TOPO_ADMIN_ID,
+#        [   DEV_DC1GW_ID, DEV_DC2GW_ID,
+#            DEV_CS1GW1_ID, DEV_CS1GW2_ID, DEV_CS2GW1_ID, DEV_CS2GW2_ID,
+#            DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID,
+#            DEV_TOLS_ID,
+#        ],
+#        [   LINK_DC1GW_CS1GW1_ID, LINK_DC1GW_CS1GW2_ID, LINK_DC2GW_CS2GW1_ID, LINK_DC2GW_CS2GW2_ID,
+#            LINK_CS1GW1_TNR1_ID, LINK_CS1GW2_TNR2_ID, LINK_CS1GW1_TNR2_ID, LINK_CS1GW2_TNR1_ID,
+#            LINK_CS2GW1_TNR3_ID, LINK_CS2GW2_TNR4_ID, LINK_CS2GW1_TNR4_ID, LINK_CS2GW2_TNR3_ID,
+#            LINK_TNR1_TOLS_ID, LINK_TNR2_TOLS_ID, LINK_TNR3_TOLS_ID, LINK_TNR4_TOLS_ID,
+#        ],
+#    ),
+#    (TOPO_DC1_ID,
+#        [DEV_DC1GW_ID],
+#        []),
+#    (TOPO_DC2_ID,
+#        [DEV_DC2GW_ID],
+#        []),
+#    (TOPO_CS1_ID,
+#        [DEV_CS1GW1_ID, DEV_CS1GW2_ID],
+#        []),
+#    (TOPO_CS2_ID,
+#        [DEV_CS2GW1_ID, DEV_CS2GW2_ID],
+#        []),
+#    (TOPO_TN_ID,
+#        [   DEV_TNR1_ID, DEV_TNR2_ID, DEV_TNR3_ID, DEV_TNR4_ID,
+#            DEV_TOLS_ID,
+#        ],
+#        [   LINK_TNR1_TOLS_ID, LINK_TNR2_TOLS_ID, LINK_TNR3_TOLS_ID, LINK_TNR4_TOLS_ID,
+#        ]),
+#]
diff --git a/src/pathcomp/frontend/tests/test_unitary.py b/src/pathcomp/frontend/tests/test_unitary.py
index 8088259b8..ad03e2626 100644
--- a/src/pathcomp/frontend/tests/test_unitary.py
+++ b/src/pathcomp/frontend/tests/test_unitary.py
@@ -13,12 +13,15 @@
 # limitations under the License.
 
 import copy, logging, os
+from common.Constants import DEFAULT_CONTEXT_NAME
 from common.proto.context_pb2 import Context, ContextId, DeviceId, Link, LinkId, Topology, Device, TopologyId
 from common.proto.pathcomp_pb2 import PathCompRequest
+from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario
 from common.tools.grpc.Tools import grpc_message_to_json
 from common.tools.object_factory.Constraint import (
     json_constraint_custom, json_constraint_endpoint_location_region, json_constraint_endpoint_priority,
     json_constraint_sla_availability, json_constraint_sla_capacity, json_constraint_sla_latency)
+from common.tools.object_factory.Context import json_context_id
 from common.tools.object_factory.Device import json_device_id
 from common.tools.object_factory.EndPoint import json_endpoint_id
 from common.tools.object_factory.Service import json_service_l3nm_planned
@@ -58,31 +61,29 @@ from .PrepareTestScenario import ( # pylint: disable=unused-import
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
-def test_prepare_environment(
-    context_client : ContextClient):    # pylint: disable=redefined-outer-name
-
-    for context  in CONTEXTS  : context_client.SetContext (Context (**context ))
-    for topology in TOPOLOGIES: context_client.SetTopology(Topology(**topology))
-    for device   in DEVICES   : context_client.SetDevice  (Device  (**device  ))
-    for link     in LINKS     : context_client.SetLink    (Link    (**link    ))
-
-    for topology_id, device_ids, link_ids in OBJECTS_PER_TOPOLOGY:
-        topology = Topology()
-        topology.CopyFrom(context_client.GetTopology(TopologyId(**topology_id)))
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
+DESCRIPTORS = {
+    'dummy_mode': True,
+    'contexts'  : CONTEXTS,
+    'topologies': TOPOLOGIES,
+    'devices'   : DEVICES,
+    'links'     : LINKS,
+}
 
-        device_ids_in_topology = {device_id.device_uuid.uuid for device_id in topology.device_ids}
-        func_device_id_not_added = lambda device_id: device_id['device_uuid']['uuid'] not in device_ids_in_topology
-        func_device_id_json_to_grpc = lambda device_id: DeviceId(**device_id)
-        device_ids_to_add = list(map(func_device_id_json_to_grpc, filter(func_device_id_not_added, device_ids)))
-        topology.device_ids.extend(device_ids_to_add)
+def test_prepare_environment(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+) -> None:
+    validate_empty_scenario(context_client)
 
-        link_ids_in_topology = {link_id.link_uuid.uuid for link_id in topology.link_ids}
-        func_link_id_not_added = lambda link_id: link_id['link_uuid']['uuid'] not in link_ids_in_topology
-        func_link_id_json_to_grpc = lambda link_id: LinkId(**link_id)
-        link_ids_to_add = list(map(func_link_id_json_to_grpc, filter(func_link_id_not_added, link_ids)))
-        topology.link_ids.extend(link_ids_to_add)
+    descriptor_loader = DescriptorLoader(descriptors=DESCRIPTORS, context_client=context_client)
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+    descriptor_loader.validate()
 
-        context_client.SetTopology(topology)
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
 
 def test_request_service_shortestpath(
     pathcomp_client : PathCompClient):  # pylint: disable=redefined-outer-name
@@ -266,9 +267,15 @@ def test_request_service_kdisjointpath(
 
 
 def test_cleanup_environment(
-    context_client : ContextClient):    # pylint: disable=redefined-outer-name
-
-    for link     in LINKS     : context_client.RemoveLink    (LinkId    (**link    ['link_id'    ]))
-    for device   in DEVICES   : context_client.RemoveDevice  (DeviceId  (**device  ['device_id'  ]))
-    for topology in TOPOLOGIES: context_client.RemoveTopology(TopologyId(**topology['topology_id']))
-    for context  in CONTEXTS  : context_client.RemoveContext (ContextId (**context ['context_id' ]))
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+) -> None:
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
+
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors=DESCRIPTORS, context_client=context_client)
+    descriptor_loader.validate()
+    descriptor_loader.unload()
+    validate_empty_scenario(context_client)
-- 
GitLab


From a0f7721f1af9cb9cc806c35d70335962d1cc7ad2 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sun, 26 Mar 2023 07:04:17 +0000
Subject: [PATCH 216/229] PathComp component - Frontend:

- Fixed Dockerfile
---
 src/pathcomp/frontend/Dockerfile | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/pathcomp/frontend/Dockerfile b/src/pathcomp/frontend/Dockerfile
index 352de75f3..9384b3e19 100644
--- a/src/pathcomp/frontend/Dockerfile
+++ b/src/pathcomp/frontend/Dockerfile
@@ -62,8 +62,14 @@ RUN python3 -m pip install -r requirements.txt
 
 # Add component files into working directory
 WORKDIR /var/teraflow
-COPY src/context/. context/
-COPY src/device/. device/
+COPY src/context/__init__.py context/__init__.py
+COPY src/context/client/. context/client/
+COPY src/device/__init__.py device/__init__.py
+COPY src/device/client/. device/client/
+COPY src/service/__init__.py service/__init__.py
+COPY src/service/client/. service/client/
+COPY src/slice/__init__.py slice/__init__.py
+COPY src/slice/client/. slice/client/
 COPY src/pathcomp/. pathcomp/
 
 # Start the service
-- 
GitLab


From b2b035c92d9b8715ec7dbf0852ce91c272214a53 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sun, 26 Mar 2023 07:15:30 +0000
Subject: [PATCH 217/229] Policy component:

- Fixed code formatting
---
 .../src/test/java/eu/teraflow/policy/SerializerTest.java       | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
index 641026461..b0fb90864 100644
--- a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
+++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
@@ -3601,7 +3601,8 @@ class SerializerTest {
                         ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352),
                 Arguments.of(DeviceDriverEnum.XR, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_XR),
                 Arguments.of(
-                        DeviceDriverEnum.IETF_L2VPN, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN),
+                        DeviceDriverEnum.IETF_L2VPN,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_L2VPN),
                 Arguments.of(
                         DeviceDriverEnum.UNDEFINED, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED));
     }
-- 
GitLab


From bd3fe6ed75216d8c052655d51c1440960e85b45a Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sun, 26 Mar 2023 07:24:16 +0000
Subject: [PATCH 218/229] PathComp component - Frontend:

- Fixed unitary tests
---
 src/pathcomp/frontend/tests/test_unitary.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/pathcomp/frontend/tests/test_unitary.py b/src/pathcomp/frontend/tests/test_unitary.py
index ad03e2626..f4e3cbf0f 100644
--- a/src/pathcomp/frontend/tests/test_unitary.py
+++ b/src/pathcomp/frontend/tests/test_unitary.py
@@ -14,7 +14,7 @@
 
 import copy, logging, os
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import Context, ContextId, DeviceId, Link, LinkId, Topology, Device, TopologyId
+from common.proto.context_pb2 import ContextId
 from common.proto.pathcomp_pb2 import PathCompRequest
 from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario
 from common.tools.grpc.Tools import grpc_message_to_json
@@ -29,9 +29,9 @@ from context.client.ContextClient import ContextClient
 from pathcomp.frontend.client.PathCompClient import PathCompClient
 
 # Scenarios:
-#from .Objects_A_B_C import CONTEXTS, DEVICES, LINKS, OBJECTS_PER_TOPOLOGY, SERVICES, TOPOLOGIES
-#from .Objects_DC_CSGW_TN import CONTEXTS, DEVICES, LINKS, OBJECTS_PER_TOPOLOGY, SERVICES, TOPOLOGIES
-from .Objects_DC_CSGW_TN_OLS import CONTEXTS, DEVICES, LINKS, OBJECTS_PER_TOPOLOGY, SERVICES, TOPOLOGIES
+#from .Objects_A_B_C import CONTEXTS, DEVICES, LINKS, SERVICES, TOPOLOGIES
+#from .Objects_DC_CSGW_TN import CONTEXTS, DEVICES, LINKS, SERVICES, TOPOLOGIES
+from .Objects_DC_CSGW_TN_OLS import CONTEXTS, DEVICES, LINKS, SERVICES, TOPOLOGIES
 
 # configure backend environment variables before overwriting them with fixtures to use real backend pathcomp
 DEFAULT_PATHCOMP_BACKEND_SCHEME  = 'http'
-- 
GitLab


From 8523a11d230a180af48dbe1cf9c9559d8c278318 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sun, 26 Mar 2023 08:04:05 +0000
Subject: [PATCH 219/229] PathComp component - Frontend:

- Fixed KDisjoint Algorithm Reply
---
 .../algorithms/KDisjointPathAlgorithm.py      | 120 ++++++++++--------
 1 file changed, 65 insertions(+), 55 deletions(-)

diff --git a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
index a6d39ee36..b15c89602 100644
--- a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
+++ b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
@@ -141,7 +141,7 @@ class KDisjointPathAlgorithm(_Algorithm):
 
         Path = List[Dict]
         Path_NoPath = Optional[Path] # None = no path, list = path
-        self.json_reply : Dict[Tuple[str, str], List[Path_NoPath]] = dict()
+        service_to_paths : Dict[Tuple[str, str], List[Path_NoPath]] = dict()
 
         for num_path in range(self.num_disjoint):
             algorithm.service_list = list()
@@ -189,66 +189,76 @@ class KDisjointPathAlgorithm(_Algorithm):
             for response in response_list:
                 service_id = response['serviceId']
                 service_key = (service_id['contextId'], service_id['service_uuid'])
-                json_reply_service = self.json_reply.setdefault(service_key, list())
+                json_reply_service = service_to_paths.setdefault(service_key, list())
 
                 no_path_issue = response.get('noPath', {}).get('issue')
-                if no_path_issue is not None:
-                    json_reply_service.append(None)
-                    continue
+                if no_path_issue is not None: continue
 
                 path_endpoints = response['path'][0]['devices']
                 json_reply_service.append(path_endpoints)
                 algorithm.link_list = self.remove_traversed_links(algorithm.link_list, path_endpoints)
 
+        self.json_reply = dict()
+        response_list = self.json_reply.get('response-list', [])
+        for service_key,paths in service_to_paths.items():
+            response = {'serviceId': {
+                'contextId': service_key[0],
+                'service_uuid': service_key[1],
+            }}
+            response['path'] = paths
+            if len(paths) < self.num_disjoint:
+                response['noPath'] = {'issue': 1}
+            response_list.append(response)
+
         self.logger.debug('self.json_reply = {:s}'.format(str(self.json_reply)))
 
-    def get_reply(self) -> PathCompReply:
-        reply = PathCompReply()
-        grpc_services : Dict[Tuple[str, str], Service] = {}
-        grpc_connections : Dict[Tuple[int, str], Connection] = {}
-        for service_key,paths in self.json_reply.items():
-            context_uuid, service_uuid = service_key
-
-            grpc_services[service_key] = self.add_service_to_reply(reply, context_uuid, service_uuid)
-
-            for num_path,service_path_ero in enumerate(paths):
-                self.logger.warning('num_path={:d}'.format(num_path))
-                self.logger.warning('service_path_ero={:s}'.format(str(service_path_ero)))
-                if service_path_ero is None: continue
-                path_hops = eropath_to_hops(service_path_ero, self.endpoint_to_link_dict)
-                self.logger.warning('path_hops={:s}'.format(str(path_hops)))
-                connections = convert_explicit_path_hops_to_connections(path_hops, self.device_dict, service_uuid)
-                self.logger.warning('connections={:s}'.format(str(connections)))
-
-                for connection in connections:
-                    connection_uuid,device_layer,path_hops,_ = connection
-
-                    service_key = (context_uuid, connection_uuid)
-                    grpc_service = grpc_services.get(service_key)
-                    if grpc_service is not None: continue
-                    grpc_service = self.add_service_to_reply(
-                        reply, context_uuid, connection_uuid, device_layer=device_layer, path_hops=path_hops)
-                    grpc_services[service_key] = grpc_service
-
-                for connection in connections:
-                    connection_uuid,device_layer,path_hops,dependencies = connection
-
-                    service_key = (context_uuid, connection_uuid)
-                    grpc_service = grpc_services.get(service_key)
-                    if grpc_service is None: raise Exception('Service({:s}) not found'.format(str(service_key)))
-
-                    connection_uuid = '{:s}:{:d}'.format(connection_uuid, num_path)
-                    grpc_connection = grpc_connections.get(connection_uuid)
-                    if grpc_connection is not None: continue
-                    grpc_connection = self.add_connection_to_reply(reply, connection_uuid, grpc_service, path_hops)
-                    grpc_connections[connection_uuid] = grpc_connection
-
-                    for sub_service_uuid in dependencies:
-                        sub_service_key = (context_uuid, sub_service_uuid)
-                        grpc_sub_service = grpc_services.get(sub_service_key)
-                        if grpc_sub_service is None:
-                            raise Exception('Service({:s}) not found'.format(str(sub_service_key)))
-                        grpc_sub_service_id = grpc_connection.sub_service_ids.add()
-                        grpc_sub_service_id.CopyFrom(grpc_sub_service.service_id)
-
-        return reply
+#    def get_reply(self) -> PathCompReply:
+#        reply = PathCompReply()
+#        grpc_services : Dict[Tuple[str, str], Service] = {}
+#        grpc_connections : Dict[Tuple[int, str], Connection] = {}
+#        for service_key,paths in self.json_reply.items():
+#            context_uuid, service_uuid = service_key
+#
+#            grpc_services[service_key] = self.add_service_to_reply(reply, context_uuid, service_uuid)
+#
+#            for num_path,service_path_ero in enumerate(paths):
+#                self.logger.warning('num_path={:d}'.format(num_path))
+#                self.logger.warning('service_path_ero={:s}'.format(str(service_path_ero)))
+#                if service_path_ero is None: continue
+#                path_hops = eropath_to_hops(service_path_ero, self.endpoint_to_link_dict)
+#                self.logger.warning('path_hops={:s}'.format(str(path_hops)))
+#                connections = convert_explicit_path_hops_to_connections(path_hops, self.device_dict, service_uuid)
+#                self.logger.warning('connections={:s}'.format(str(connections)))
+#
+#                for connection in connections:
+#                    connection_uuid,device_layer,path_hops,_ = connection
+#
+#                    service_key = (context_uuid, connection_uuid)
+#                    grpc_service = grpc_services.get(service_key)
+#                    if grpc_service is not None: continue
+#                    grpc_service = self.add_service_to_reply(
+#                        reply, context_uuid, connection_uuid, device_layer=device_layer, path_hops=path_hops)
+#                    grpc_services[service_key] = grpc_service
+#
+#                for connection in connections:
+#                    connection_uuid,device_layer,path_hops,dependencies = connection
+#
+#                    service_key = (context_uuid, connection_uuid)
+#                    grpc_service = grpc_services.get(service_key)
+#                    if grpc_service is None: raise Exception('Service({:s}) not found'.format(str(service_key)))
+#
+#                    connection_uuid = '{:s}:{:d}'.format(connection_uuid, num_path)
+#                    grpc_connection = grpc_connections.get(connection_uuid)
+#                    if grpc_connection is not None: continue
+#                    grpc_connection = self.add_connection_to_reply(reply, connection_uuid, grpc_service, path_hops)
+#                    grpc_connections[connection_uuid] = grpc_connection
+#
+#                    for sub_service_uuid in dependencies:
+#                        sub_service_key = (context_uuid, sub_service_uuid)
+#                        grpc_sub_service = grpc_services.get(sub_service_key)
+#                        if grpc_sub_service is None:
+#                            raise Exception('Service({:s}) not found'.format(str(sub_service_key)))
+#                        grpc_sub_service_id = grpc_connection.sub_service_ids.add()
+#                        grpc_sub_service_id.CopyFrom(grpc_sub_service.service_id)
+#
+#        return reply
-- 
GitLab


From b0bbbacdb3519d61242e90a34bbf3ea1ef0b5305 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sun, 26 Mar 2023 10:44:05 +0000
Subject: [PATCH 220/229] Common - Tools - Descriptors:

- Added dummy unload mode
---
 src/common/tools/descriptor/Loader.py | 49 ++++++++++++++++++++++++---
 1 file changed, 44 insertions(+), 5 deletions(-)

diff --git a/src/common/tools/descriptor/Loader.py b/src/common/tools/descriptor/Loader.py
index 0e1d8c737..1e238510c 100644
--- a/src/common/tools/descriptor/Loader.py
+++ b/src/common/tools/descriptor/Loader.py
@@ -222,13 +222,13 @@ class DescriptorLoader:
         self.__topologies_add = get_descriptors_add_topologies(self.__topologies)
 
         if self.__dummy_mode:
-            self._dummy_mode()
+            self._load_dummy_mode()
         else:
-            self._normal_mode()
+            self._load_normal_mode()
         
         return self.__results
 
-    def _dummy_mode(self) -> None:
+    def _load_dummy_mode(self) -> None:
         # Dummy Mode: used to pre-load databases (WebUI debugging purposes) with no smart or automated tasks.
         self.__ctx_cli.connect()
         self._process_descr('context',    'add',    self.__ctx_cli.SetContext,    Context,    self.__contexts_add  )
@@ -242,7 +242,7 @@ class DescriptorLoader:
         self._process_descr('topology',   'update', self.__ctx_cli.SetTopology,   Topology,   self.__topologies    )
         #self.__ctx_cli.close()
 
-    def _normal_mode(self) -> None:
+    def _load_normal_mode(self) -> None:
         # Normal mode: follows the automated workflows in the different components
         assert len(self.__connections) == 0, 'in normal mode, connections should not be set'
 
@@ -321,7 +321,35 @@ class DescriptorLoader:
             response = self.__ctx_cli.ListSlices(ContextId(**json_context_id(context_uuid)))
             assert len(response.slices) == num_slices
 
-    def unload(self) -> None:
+    def _unload_dummy_mode(self) -> None:
+        # Dummy Mode: used to pre-load databases (WebUI debugging purposes) with no smart or automated tasks.
+        self.__ctx_cli.connect()
+
+        for _, slice_list in self.slices.items():
+            for slice_ in slice_list:
+                self.__ctx_cli.RemoveSlice(SliceId(**slice_['slice_id']))
+
+        for _, service_list in self.services.items():
+            for service in service_list:
+                self.__ctx_cli.RemoveService(ServiceId(**service['service_id']))
+
+        for link in self.links:
+            self.__ctx_cli.RemoveLink(LinkId(**link['link_id']))
+
+        for device in self.devices:
+            self.__ctx_cli.RemoveDevice(DeviceId(**device['device_id']))
+
+        for _, topology_list in self.topologies.items():
+            for topology in topology_list:
+                self.__ctx_cli.RemoveTopology(TopologyId(**topology['topology_id']))
+
+        for context in self.contexts:
+            self.__ctx_cli.RemoveContext(ContextId(**context['context_id']))
+
+        #self.__ctx_cli.close()
+
+    def _unload_normal_mode(self) -> None:
+        # Normal mode: follows the automated workflows in the different components
         self.__ctx_cli.connect()
         self.__dev_cli.connect()
         self.__svc_cli.connect()
@@ -348,6 +376,17 @@ class DescriptorLoader:
         for context in self.contexts:
             self.__ctx_cli.RemoveContext(ContextId(**context['context_id']))
 
+        #self.__ctx_cli.close()
+        #self.__dev_cli.close()
+        #self.__svc_cli.close()
+        #self.__slc_cli.close()
+
+    def unload(self) -> None:
+        if self.__dummy_mode:
+            self._unload_dummy_mode()
+        else:
+            self._unload_normal_mode()
+
 def compose_notifications(results : TypeResults) -> TypeNotificationList:
     notifications = []
     for entity_name, action_name, num_ok, error_list in results:
-- 
GitLab


From 333d402d5f9f125f03b59e8fa25bb5f552b5ad7a Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sun, 26 Mar 2023 10:44:47 +0000
Subject: [PATCH 221/229] PathComp component - Frontend:

- Corrected get_link_from_endpoint in KDisjointPath algorithm
---
 .../frontend/service/algorithms/KDisjointPathAlgorithm.py     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
index b15c89602..03d9295be 100644
--- a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
+++ b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
@@ -19,7 +19,7 @@ from common.proto.pathcomp_pb2 import Algorithm_KDisjointPath, Algorithm_KShorte
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from pathcomp.frontend.service.algorithms.tools.ComputeSubServices import convert_explicit_path_hops_to_connections
 from pathcomp.frontend.service.algorithms.tools.EroPathToHops import eropath_to_hops
-from ._Algorithm import _Algorithm
+from ._Algorithm import _Algorithm, SRC_END
 from .KShortestPathAlgorithm import KShortestPathAlgorithm
 
 Service_Id          = Tuple[str, str]   # (context_uuid, service_uuid)
@@ -100,7 +100,7 @@ class KDisjointPathAlgorithm(_Algorithm):
     def get_link_from_endpoint(self, endpoint : Dict) -> Tuple[Dict, Link]:
         device_uuid = endpoint['device_id']
         endpoint_uuid = endpoint['endpoint_uuid']
-        item = self.endpoint_to_link_dict.get((device_uuid, endpoint_uuid))
+        item = self.endpoint_to_link_dict.get((device_uuid, endpoint_uuid, SRC_END))
         if item is None:
             MSG = 'Link for Endpoint({:s}, {:s}) not found'
             self.logger.warning(MSG.format(device_uuid, endpoint_uuid))
-- 
GitLab


From a397783df2f11533c2ed1505aa23c0108e35dae0 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Sun, 26 Mar 2023 11:51:52 +0000
Subject: [PATCH 222/229] PathComp component - Frontend:

- Activated debug in log to check CI/CD pipeline
---
 src/pathcomp/.gitlab-ci.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pathcomp/.gitlab-ci.yml b/src/pathcomp/.gitlab-ci.yml
index 20ec4e728..289dc6093 100644
--- a/src/pathcomp/.gitlab-ci.yml
+++ b/src/pathcomp/.gitlab-ci.yml
@@ -131,7 +131,7 @@ unit_test pathcomp-frontend:
     - docker logs ${IMAGE_NAME}-backend
     - >
       docker exec -i ${IMAGE_NAME}-frontend bash -c 
-      "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/frontend/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}-frontend_report.xml"
+      "coverage run -m pytest --log-level=DEBUG --verbose $IMAGE_NAME/frontend/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}-frontend_report.xml"
     - docker exec -i ${IMAGE_NAME}-frontend bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing"
   coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
   after_script:
-- 
GitLab


From 1e1de1fcc4eb04adba7fdd01d7ecd79c18685ba1 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 27 Mar 2023 09:40:57 +0000
Subject: [PATCH 223/229] PathComp component - Frontend:

- Corrected KDisjointPath response generation
---
 .../frontend/service/algorithms/KDisjointPathAlgorithm.py       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
index 03d9295be..eac91501a 100644
--- a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
+++ b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
@@ -199,7 +199,7 @@ class KDisjointPathAlgorithm(_Algorithm):
                 algorithm.link_list = self.remove_traversed_links(algorithm.link_list, path_endpoints)
 
         self.json_reply = dict()
-        response_list = self.json_reply.get('response-list', [])
+        response_list = self.json_reply.setdefault('response-list', [])
         for service_key,paths in service_to_paths.items():
             response = {'serviceId': {
                 'contextId': service_key[0],
-- 
GitLab


From a00c756c2e43da93bb20f3dd53f4e2bbf6148f98 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 27 Mar 2023 11:10:57 +0000
Subject: [PATCH 224/229] PathComp component - Frontend:

- Corrected KDisjointPath response generation
---
 .../frontend/service/algorithms/KDisjointPathAlgorithm.py     | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
index eac91501a..eda8ae5c5 100644
--- a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
+++ b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
@@ -194,9 +194,9 @@ class KDisjointPathAlgorithm(_Algorithm):
                 no_path_issue = response.get('noPath', {}).get('issue')
                 if no_path_issue is not None: continue
 
-                path_endpoints = response['path'][0]['devices']
+                path_endpoints = response['path'][0]
                 json_reply_service.append(path_endpoints)
-                algorithm.link_list = self.remove_traversed_links(algorithm.link_list, path_endpoints)
+                algorithm.link_list = self.remove_traversed_links(algorithm.link_list, path_endpoints['devices'])
 
         self.json_reply = dict()
         response_list = self.json_reply.setdefault('response-list', [])
-- 
GitLab


From 8766c63b6c8b76c97b20fb7ffdeea99af9388833 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Mon, 27 Mar 2023 16:30:22 +0000
Subject: [PATCH 225/229] PathComp component - Frontend:

- Pre-merge code polishing
- Restored default log level
---
 src/pathcomp/.gitlab-ci.yml                   |  2 +-
 .../algorithms/KDisjointPathAlgorithm.py      | 57 +------------------
 2 files changed, 3 insertions(+), 56 deletions(-)

diff --git a/src/pathcomp/.gitlab-ci.yml b/src/pathcomp/.gitlab-ci.yml
index 289dc6093..20ec4e728 100644
--- a/src/pathcomp/.gitlab-ci.yml
+++ b/src/pathcomp/.gitlab-ci.yml
@@ -131,7 +131,7 @@ unit_test pathcomp-frontend:
     - docker logs ${IMAGE_NAME}-backend
     - >
       docker exec -i ${IMAGE_NAME}-frontend bash -c 
-      "coverage run -m pytest --log-level=DEBUG --verbose $IMAGE_NAME/frontend/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}-frontend_report.xml"
+      "coverage run -m pytest --log-level=INFO --verbose $IMAGE_NAME/frontend/tests/test_unitary.py --junitxml=/opt/results/${IMAGE_NAME}-frontend_report.xml"
     - docker exec -i ${IMAGE_NAME}-frontend bash -c "coverage report --include='${IMAGE_NAME}/*' --show-missing"
   coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/'
   after_script:
diff --git a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
index eda8ae5c5..144246620 100644
--- a/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
+++ b/src/pathcomp/frontend/service/algorithms/KDisjointPathAlgorithm.py
@@ -14,11 +14,9 @@
 
 import operator
 from typing import Dict, List, Optional, Set, Tuple
-from common.proto.context_pb2 import Connection, Link, Service
-from common.proto.pathcomp_pb2 import Algorithm_KDisjointPath, Algorithm_KShortestPath, PathCompReply, PathCompRequest
+from common.proto.context_pb2 import Link
+from common.proto.pathcomp_pb2 import Algorithm_KDisjointPath, Algorithm_KShortestPath, PathCompRequest
 from common.tools.grpc.Tools import grpc_message_to_json_string
-from pathcomp.frontend.service.algorithms.tools.ComputeSubServices import convert_explicit_path_hops_to_connections
-from pathcomp.frontend.service.algorithms.tools.EroPathToHops import eropath_to_hops
 from ._Algorithm import _Algorithm, SRC_END
 from .KShortestPathAlgorithm import KShortestPathAlgorithm
 
@@ -211,54 +209,3 @@ class KDisjointPathAlgorithm(_Algorithm):
             response_list.append(response)
 
         self.logger.debug('self.json_reply = {:s}'.format(str(self.json_reply)))
-
-#    def get_reply(self) -> PathCompReply:
-#        reply = PathCompReply()
-#        grpc_services : Dict[Tuple[str, str], Service] = {}
-#        grpc_connections : Dict[Tuple[int, str], Connection] = {}
-#        for service_key,paths in self.json_reply.items():
-#            context_uuid, service_uuid = service_key
-#
-#            grpc_services[service_key] = self.add_service_to_reply(reply, context_uuid, service_uuid)
-#
-#            for num_path,service_path_ero in enumerate(paths):
-#                self.logger.warning('num_path={:d}'.format(num_path))
-#                self.logger.warning('service_path_ero={:s}'.format(str(service_path_ero)))
-#                if service_path_ero is None: continue
-#                path_hops = eropath_to_hops(service_path_ero, self.endpoint_to_link_dict)
-#                self.logger.warning('path_hops={:s}'.format(str(path_hops)))
-#                connections = convert_explicit_path_hops_to_connections(path_hops, self.device_dict, service_uuid)
-#                self.logger.warning('connections={:s}'.format(str(connections)))
-#
-#                for connection in connections:
-#                    connection_uuid,device_layer,path_hops,_ = connection
-#
-#                    service_key = (context_uuid, connection_uuid)
-#                    grpc_service = grpc_services.get(service_key)
-#                    if grpc_service is not None: continue
-#                    grpc_service = self.add_service_to_reply(
-#                        reply, context_uuid, connection_uuid, device_layer=device_layer, path_hops=path_hops)
-#                    grpc_services[service_key] = grpc_service
-#
-#                for connection in connections:
-#                    connection_uuid,device_layer,path_hops,dependencies = connection
-#
-#                    service_key = (context_uuid, connection_uuid)
-#                    grpc_service = grpc_services.get(service_key)
-#                    if grpc_service is None: raise Exception('Service({:s}) not found'.format(str(service_key)))
-#
-#                    connection_uuid = '{:s}:{:d}'.format(connection_uuid, num_path)
-#                    grpc_connection = grpc_connections.get(connection_uuid)
-#                    if grpc_connection is not None: continue
-#                    grpc_connection = self.add_connection_to_reply(reply, connection_uuid, grpc_service, path_hops)
-#                    grpc_connections[connection_uuid] = grpc_connection
-#
-#                    for sub_service_uuid in dependencies:
-#                        sub_service_key = (context_uuid, sub_service_uuid)
-#                        grpc_sub_service = grpc_services.get(sub_service_key)
-#                        if grpc_sub_service is None:
-#                            raise Exception('Service({:s}) not found'.format(str(sub_service_key)))
-#                        grpc_sub_service_id = grpc_connection.sub_service_ids.add()
-#                        grpc_sub_service_id.CopyFrom(grpc_sub_service.service_id)
-#
-#        return reply
-- 
GitLab


From 08d4197db6d5d9b4e68dadbd4c6b9b3fce97d4a2 Mon Sep 17 00:00:00 2001
From: Carlos Natalino <carlos.natalino@chalmers.se>
Date: Tue, 28 Mar 2023 13:50:16 +0200
Subject: [PATCH 226/229] Changes to the deploy and webui yaml to accommodate
 the new metrics collection framework

---
 deploy/tfs.sh                         | 18 ++++--
 manifests/nginx_ingress_http_new.yaml | 81 +++++++++++++++++++++++++++
 manifests/webuiservice.yaml           | 37 ------------
 3 files changed, 93 insertions(+), 43 deletions(-)
 create mode 100644 manifests/nginx_ingress_http_new.yaml

diff --git a/deploy/tfs.sh b/deploy/tfs.sh
index 4c6dc95d2..a9dc74ef0 100755
--- a/deploy/tfs.sh
+++ b/deploy/tfs.sh
@@ -241,7 +241,8 @@ for COMPONENT in $TFS_COMPONENTS; do
 
     echo "  Adapting '$COMPONENT' manifest file..."
     MANIFEST="$TMP_MANIFESTS_FOLDER/${COMPONENT}service.yaml"
-    cp ./manifests/"${COMPONENT}"service.yaml "$MANIFEST"
+    # cp ./manifests/"${COMPONENT}"service.yaml "$MANIFEST"
+    cat ./manifests/"${COMPONENT}"service.yaml | linkerd inject - --proxy-cpu-request "10m" --proxy-cpu-limit "1" --proxy-memory-request "64Mi" --proxy-memory-limit "256Mi" > "$MANIFEST"
 
     if [ "$COMPONENT" == "pathcomp" ]; then
         IMAGE_URL=$(echo "$TFS_REGISTRY_IMAGES/$COMPONENT-frontend:$TFS_IMAGE_TAG" | sed 's,//,/,g' | sed 's,http:/,,g')
@@ -328,14 +329,19 @@ if [[ "$TFS_COMPONENTS" == *"webui"* ]]; then
     echo "Configuring WebUI DataStores and Dashboards..."
     sleep 5
 
-    INGRESS_CTRL_NAME=$(echo "${TFS_K8S_NAMESPACE}" | sed "s/tfs/nginx-ingress-microk8s-controller/g")
-    EXT_HTTP_PORT=$(kubectl get daemonsets.apps --namespace ingress ${INGRESS_CTRL_NAME} \
-        -o 'jsonpath={.spec.template.spec.containers[?(@.name=="nginx-ingress-microk8s")].ports[?(@.name=="http")].hostPort}')
+    # INGRESS_CTRL_NAME=$(echo "${TFS_K8S_NAMESPACE}" | sed "s/tfs/nginx-ingress-microk8s-controller/g")
+    # EXT_HTTP_PORT=$(kubectl get daemonsets.apps --namespace ingress ${INGRESS_CTRL_NAME} \
+    #     -o 'jsonpath={.spec.template.spec.containers[?(@.name=="nginx-ingress-microk8s")].ports[?(@.name=="http")].hostPort}')
+    
+    # get IP and port of grafana in the `monitoring` namespace
+    GRAFANA_IP=$(kubectl get service/grafana -n monitoring -o jsonpath='{.spec.clusterIP}')
+    GRAFANA_PORT=3000 #$(kubectl get service webuiservice --namespace $TFS_K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}')
 
     # Exposed through the ingress controller "tfs-ingress"
-    GRAFANA_URL="127.0.0.1:${EXT_HTTP_PORT}/grafana"
+    # GRAFANA_URL="127.0.0.1:${EXT_HTTP_PORT}/grafana"
+    GRAFANA_URL="${GRAFANA_IP}:${GRAFANA_PORT}"
 
-    # Default Grafana credentials
+    # Default Grafana credentials when installed with the `monitoring` addon
     GRAFANA_USERNAME="admin"
     GRAFANA_PASSWORD="admin"
 
diff --git a/manifests/nginx_ingress_http_new.yaml b/manifests/nginx_ingress_http_new.yaml
new file mode 100644
index 000000000..e9a389ccc
--- /dev/null
+++ b/manifests/nginx_ingress_http_new.yaml
@@ -0,0 +1,81 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: tfs-ingress
+  namespace: tfs
+  annotations:
+    nginx.ingress.kubernetes.io/rewrite-target: /$2
+spec:
+  rules:
+  - http:
+      paths:
+        - path: /webui(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: webuiservice
+              port:
+                number: 8004
+        - path: /grafana(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: webuiservice
+              port:
+                number: 3000
+        #- path: /context(/|$)(.*)
+        #  pathType: Prefix
+        #  backend:
+        #    service:
+        #      name: contextservice
+        #      port:
+        #        number: 8080
+        - path: /()(restconf/.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: computeservice
+              port:
+                number: 8080
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: grafana-ingress
+  namespace: monitoring
+  annotations:
+    nginx.ingress.kubernetes.io/rewrite-target: /$2
+    nginx.ingress.kubernetes.io/proxy-redirect-from: "/"
+    nginx.ingress.kubernetes.io/proxy-redirect-to: "/newgrafana/"
+spec:
+  rules:
+  - http:
+      paths:
+        - path: /newgrafana(/|$)(.*)
+          pathType: Prefix
+          backend:
+            service:
+              name: grafana
+              port:
+                number: 3000
+        #- path: /context(/|$)(.*)
+        #  pathType: Prefix
+        #  backend:
+        #    service:
+        #      name: contextservice
+        #      port:
+        #        number: 8080
diff --git a/manifests/webuiservice.yaml b/manifests/webuiservice.yaml
index 234075f73..255ee68a2 100644
--- a/manifests/webuiservice.yaml
+++ b/manifests/webuiservice.yaml
@@ -61,43 +61,6 @@ spec:
           limits:
             cpu: 500m
             memory: 512Mi
-      - name: grafana
-        image: grafana/grafana:8.5.11
-        imagePullPolicy: IfNotPresent
-        ports:
-          - containerPort: 3000
-            name: http-grafana
-            protocol: TCP
-        env:
-        - name: GF_SERVER_ROOT_URL
-          value: "http://0.0.0.0:3000/grafana/"
-        - name: GF_SERVER_SERVE_FROM_SUB_PATH
-          value: "true"
-        readinessProbe:
-          failureThreshold: 3
-          httpGet:
-            path: /robots.txt
-            port: 3000
-            scheme: HTTP
-          initialDelaySeconds: 10
-          periodSeconds: 30
-          successThreshold: 1
-          timeoutSeconds: 2
-        livenessProbe:
-          failureThreshold: 3
-          initialDelaySeconds: 30
-          periodSeconds: 10
-          successThreshold: 1
-          tcpSocket:
-            port: 3000
-          timeoutSeconds: 1
-        resources:
-          requests:
-            cpu: 150m
-            memory: 512Mi
-          limits:
-            cpu: 500m
-            memory: 1024Mi
 ---
 apiVersion: v1
 kind: Service
-- 
GitLab


From dadfe9186e9710adfdddbf3105f8489a1cfefbd0 Mon Sep 17 00:00:00 2001
From: Carlos Natalino <carlos.natalino@chalmers.se>
Date: Tue, 28 Mar 2023 13:52:50 +0200
Subject: [PATCH 227/229] Removing unnecessary files

---
 manifests/nginx_ingress_http_new.yaml | 81 ---------------------------
 1 file changed, 81 deletions(-)
 delete mode 100644 manifests/nginx_ingress_http_new.yaml

diff --git a/manifests/nginx_ingress_http_new.yaml b/manifests/nginx_ingress_http_new.yaml
deleted file mode 100644
index e9a389ccc..000000000
--- a/manifests/nginx_ingress_http_new.yaml
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: tfs-ingress
-  namespace: tfs
-  annotations:
-    nginx.ingress.kubernetes.io/rewrite-target: /$2
-spec:
-  rules:
-  - http:
-      paths:
-        - path: /webui(/|$)(.*)
-          pathType: Prefix
-          backend:
-            service:
-              name: webuiservice
-              port:
-                number: 8004
-        - path: /grafana(/|$)(.*)
-          pathType: Prefix
-          backend:
-            service:
-              name: webuiservice
-              port:
-                number: 3000
-        #- path: /context(/|$)(.*)
-        #  pathType: Prefix
-        #  backend:
-        #    service:
-        #      name: contextservice
-        #      port:
-        #        number: 8080
-        - path: /()(restconf/.*)
-          pathType: Prefix
-          backend:
-            service:
-              name: computeservice
-              port:
-                number: 8080
----
-apiVersion: networking.k8s.io/v1
-kind: Ingress
-metadata:
-  name: grafana-ingress
-  namespace: monitoring
-  annotations:
-    nginx.ingress.kubernetes.io/rewrite-target: /$2
-    nginx.ingress.kubernetes.io/proxy-redirect-from: "/"
-    nginx.ingress.kubernetes.io/proxy-redirect-to: "/newgrafana/"
-spec:
-  rules:
-  - http:
-      paths:
-        - path: /newgrafana(/|$)(.*)
-          pathType: Prefix
-          backend:
-            service:
-              name: grafana
-              port:
-                number: 3000
-        #- path: /context(/|$)(.*)
-        #  pathType: Prefix
-        #  backend:
-        #    service:
-        #      name: contextservice
-        #      port:
-        #        number: 8080
-- 
GitLab


From 21859f8d7acc95649f557657c5f85eefb5d03508 Mon Sep 17 00:00:00 2001
From: Carlos Natalino <carlos.natalino@chalmers.se>
Date: Tue, 28 Mar 2023 13:58:08 +0200
Subject: [PATCH 228/229] Including a script to open the dashboard.

---
 scripts/open_dashboard.sh | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100755 scripts/open_dashboard.sh

diff --git a/scripts/open_dashboard.sh b/scripts/open_dashboard.sh
new file mode 100755
index 000000000..2ff15684a
--- /dev/null
+++ b/scripts/open_dashboard.sh
@@ -0,0 +1,27 @@
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#/bin/bash
+
+# this script opens the dashboard
+
+GRAFANA_IP=$(kubectl get service/grafana -n monitoring -o jsonpath='{.spec.clusterIP}')
+GRAFANA_PORT=3000 #$(kubectl get service webuiservice --namespace $TFS_K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}')
+URL=http://${GRAFANA_IP}:${GRAFANA_PORT}
+
+echo Opening Dashboard on URL ${URL}
+
+# curl -kL ${URL}
+
+python3 -m webbrowser ${URL}
-- 
GitLab


From 2093df02db66ee52e14237e648632f8d6fdc3211 Mon Sep 17 00:00:00 2001
From: gifrerenom <lluis.gifre@cttc.es>
Date: Thu, 30 Mar 2023 08:10:20 +0000
Subject: [PATCH 229/229] Deploy scripts:

- Added script to expose observability framework
- Extended TFS deploy scripts to run automatically run expose observability scripts
- Adapted TFS deploy script
- Script cleanup
---
 deploy/all.sh                 | 12 ++++++++
 deploy/expose_dashboard.sh    | 58 +++++++++++++++++++++++++++++++++++
 deploy/tfs.sh                 | 13 ++++++--
 my_deploy.sh                  |  9 ++++++
 scripts/old/open_dashboard.sh |  4 +--
 scripts/open_dashboard.sh     | 27 ----------------
 6 files changed, 91 insertions(+), 32 deletions(-)
 create mode 100755 deploy/expose_dashboard.sh
 mode change 100755 => 100644 scripts/old/open_dashboard.sh
 delete mode 100755 scripts/open_dashboard.sh

diff --git a/deploy/all.sh b/deploy/all.sh
index 6f8331b76..9584dd32d 100755
--- a/deploy/all.sh
+++ b/deploy/all.sh
@@ -147,6 +147,15 @@ export QDB_DROP_TABLES_IF_EXIST=${QDB_DROP_TABLES_IF_EXIST:-""}
 export QDB_REDEPLOY=${QDB_REDEPLOY:-""}
 
 
+# ----- K8s Observability ------------------------------------------------------
+
+# If not already set, set the external port Prometheus Mgmt HTTP GUI interface will be exposed to.
+export PROM_EXT_PORT_HTTP=${PROM_EXT_PORT_HTTP:-"9090"}
+
+# If not already set, set the external port Grafana HTTP Dashboards will be exposed to.
+export GRAF_EXT_PORT_HTTP=${GRAF_EXT_PORT_HTTP:-"3000"}
+
+
 ########################################################################################################################
 # Automated steps start here
 ########################################################################################################################
@@ -160,6 +169,9 @@ export QDB_REDEPLOY=${QDB_REDEPLOY:-""}
 # Deploy QuestDB
 ./deploy/qdb.sh
 
+# Expose Dashboard
+./deploy/expose_dashboard.sh
+
 # Deploy TeraFlowSDN
 ./deploy/tfs.sh
 
diff --git a/deploy/expose_dashboard.sh b/deploy/expose_dashboard.sh
new file mode 100755
index 000000000..60b41c7b7
--- /dev/null
+++ b/deploy/expose_dashboard.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+########################################################################################################################
+# Read deployment settings
+########################################################################################################################
+
+# If not already set, set the external port Prometheus Mgmt HTTP GUI interface will be exposed to.
+export PROM_EXT_PORT_HTTP=${PROM_EXT_PORT_HTTP:-"9090"}
+
+# If not already set, set the external port Grafana HTTP Dashboards will be exposed to.
+export GRAF_EXT_PORT_HTTP=${GRAF_EXT_PORT_HTTP:-"3000"}
+
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+function expose_dashboard() {
+    echo "Prometheus Port Mapping"
+    echo ">>> Expose Prometheus HTTP Mgmt GUI port (9090->${PROM_EXT_PORT_HTTP})"
+    PROM_PORT_HTTP=$(kubectl --namespace monitoring get service prometheus-k8s -o 'jsonpath={.spec.ports[?(@.name=="web")].port}')
+    PATCH='{"data": {"'${PROM_EXT_PORT_HTTP}'": "monitoring/prometheus-k8s:'${PROM_PORT_HTTP}'"}}'
+    kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
+
+    PORT_MAP='{"containerPort": '${PROM_EXT_PORT_HTTP}', "hostPort": '${PROM_EXT_PORT_HTTP}'}'
+    CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
+    PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
+    kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
+    echo
+
+    echo "Grafana Port Mapping"
+    echo ">>> Expose Grafana HTTP Mgmt GUI port (3000->${GRAF_EXT_PORT_HTTP})"
+    GRAF_PORT_HTTP=$(kubectl --namespace monitoring get service grafana -o 'jsonpath={.spec.ports[?(@.name=="http")].port}')
+    PATCH='{"data": {"'${GRAF_EXT_PORT_HTTP}'": "monitoring/grafana:'${GRAF_PORT_HTTP}'"}}'
+    kubectl patch configmap nginx-ingress-tcp-microk8s-conf --namespace ingress --patch "${PATCH}"
+
+    PORT_MAP='{"containerPort": '${GRAF_EXT_PORT_HTTP}', "hostPort": '${GRAF_EXT_PORT_HTTP}'}'
+    CONTAINER='{"name": "nginx-ingress-microk8s", "ports": ['${PORT_MAP}']}'
+    PATCH='{"spec": {"template": {"spec": {"containers": ['${CONTAINER}']}}}}'
+    kubectl patch daemonset nginx-ingress-microk8s-controller --namespace ingress --patch "${PATCH}"
+    echo
+}
+
+expose_dashboard
diff --git a/deploy/tfs.sh b/deploy/tfs.sh
index a9dc74ef0..905cce80e 100755
--- a/deploy/tfs.sh
+++ b/deploy/tfs.sh
@@ -106,6 +106,15 @@ export QDB_TABLE_MONITORING_KPIS=${QDB_TABLE_MONITORING_KPIS:-"tfs_monitoring_kp
 export QDB_TABLE_SLICE_GROUPS=${QDB_TABLE_SLICE_GROUPS:-"tfs_slice_groups"}
 
 
+# ----- K8s Observability ------------------------------------------------------
+
+# If not already set, set the external port Prometheus Mgmt HTTP GUI interface will be exposed to.
+export PROM_EXT_PORT_HTTP=${PROM_EXT_PORT_HTTP:-"9090"}
+
+# If not already set, set the external port Grafana HTTP Dashboards will be exposed to.
+export GRAF_EXT_PORT_HTTP=${GRAF_EXT_PORT_HTTP:-"3000"}
+
+
 ########################################################################################################################
 # Automated steps start here
 ########################################################################################################################
@@ -335,11 +344,11 @@ if [[ "$TFS_COMPONENTS" == *"webui"* ]]; then
     
     # get IP and port of grafana in the `monitoring` namespace
     GRAFANA_IP=$(kubectl get service/grafana -n monitoring -o jsonpath='{.spec.clusterIP}')
-    GRAFANA_PORT=3000 #$(kubectl get service webuiservice --namespace $TFS_K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}')
+    #GRAFANA_PORT=3000 #$(kubectl get service webuiservice --namespace $TFS_K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}')
 
     # Exposed through the ingress controller "tfs-ingress"
     # GRAFANA_URL="127.0.0.1:${EXT_HTTP_PORT}/grafana"
-    GRAFANA_URL="${GRAFANA_IP}:${GRAFANA_PORT}"
+    GRAFANA_URL="${GRAFANA_IP}:${GRAF_EXT_PORT_HTTP}"
 
     # Default Grafana credentials when installed with the `monitoring` addon
     GRAFANA_USERNAME="admin"
diff --git a/my_deploy.sh b/my_deploy.sh
index 22a7ae815..f561b1ea8 100755
--- a/my_deploy.sh
+++ b/my_deploy.sh
@@ -115,3 +115,12 @@ export QDB_DROP_TABLES_IF_EXIST=""
 
 # Disable flag for re-deploying QuestDB from scratch.
 export QDB_REDEPLOY=""
+
+
+# ----- K8s Observability ------------------------------------------------------
+
+# Set the external port Prometheus Mgmt HTTP GUI interface will be exposed to.
+export PROM_EXT_PORT_HTTP="9090"
+
+# Set the external port Grafana HTTP Dashboards will be exposed to.
+export GRAF_EXT_PORT_HTTP="3000"
diff --git a/scripts/old/open_dashboard.sh b/scripts/old/open_dashboard.sh
old mode 100755
new mode 100644
index 4ea206f45..2ff15684a
--- a/scripts/old/open_dashboard.sh
+++ b/scripts/old/open_dashboard.sh
@@ -16,9 +16,7 @@
 
 # this script opens the dashboard
 
-K8S_NAMESPACE=${K8S_NAMESPACE:-'tfs'}
-
-GRAFANA_IP=$(kubectl get service/webuiservice -n ${TFS_K8S_NAMESPACE} -o jsonpath='{.spec.clusterIP}')
+GRAFANA_IP=$(kubectl get service/grafana -n monitoring -o jsonpath='{.spec.clusterIP}')
 GRAFANA_PORT=3000 #$(kubectl get service webuiservice --namespace $TFS_K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}')
 URL=http://${GRAFANA_IP}:${GRAFANA_PORT}
 
diff --git a/scripts/open_dashboard.sh b/scripts/open_dashboard.sh
deleted file mode 100755
index 2ff15684a..000000000
--- a/scripts/open_dashboard.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright 2022-2023 ETSI TeraFlowSDN - TFS OSG (https://tfs.etsi.org/)
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-#/bin/bash
-
-# this script opens the dashboard
-
-GRAFANA_IP=$(kubectl get service/grafana -n monitoring -o jsonpath='{.spec.clusterIP}')
-GRAFANA_PORT=3000 #$(kubectl get service webuiservice --namespace $TFS_K8S_NAMESPACE -o 'jsonpath={.spec.ports[?(@.port==3000)].nodePort}')
-URL=http://${GRAFANA_IP}:${GRAFANA_PORT}
-
-echo Opening Dashboard on URL ${URL}
-
-# curl -kL ${URL}
-
-python3 -m webbrowser ${URL}
-- 
GitLab